2013-11-14 3 views
2

У меня есть XML выглядеть следующим образомданные Concatenate XML Узел

<BoxResult> 
<DocumentType>BCN</DocumentType> 
<DocumentID>BCN_20131113_1197005001#[email protected]</DocumentID> 
<DocumentVersion>1</DocumentVersion> 
<ebXMLMessageId>CENTRAL_MATCHING</ebXMLMessageId> 
<State>FAILED</State> 
<Timestamp>2013-11-13T13:02:57</Timestamp> 
<Reason> 
    <ReasonCode>efet:IDNotFound</ReasonCode> 
    <ReasonText>Unknown Sender</ReasonText> 
</Reason> 
<Reason> 
    <ReasonCode>efet:IDNotFound</ReasonCode> 
    <ReasonText>Unknown Receiver</ReasonText> 
</Reason> 
</BoxResult> 

В моих C# код, мне нужно разобрать через XML и сцепить Причину текстовых данных.

В принципе, мне нужен вывод как Неизвестный отправитель; Неизвестный приемник

Я пробовал следующий код, но я не получаю желаемый результат

XmlNodeList ReasonNodeList = xmlDoc.SelectNodes(/BoxResult/Reason);    
foreach (XmlNode xmln in ReasonNodeList) 
{ 
    ReasonText = ReasonText + ";" + xmlDoc.SelectSingleNode(/BoxResult/Reason/ReasonText).InnerXml.ToString(); 
} 
if (ReasonText != " ") 
{ 
    ReasonText = ReasonText.Substring(1); 
} 

Выход я получаю от этого кода Неизвестный отправитель; Неизвестный отправитель

Это не отображается Unknown Receiver

Пожалуйста посоветуйте и ваша помощь будет полезна

ответ

1

Вы всегда используете один и тот же узел для извлечения данных. xmlDoc всегда называется (то есть первый узел <Reason>) вместо каждого целевого узла.

XmlNodeList ReasonNodeList = xmlDoc.SelectNodes("/BoxResult/Reason/ReasonText"); //change here    
foreach (XmlNode xmln in ReasonNodeList) 
{ 
    ReasonText = ReasonText + ";" + xmln.InnerXml.ToString(); //change here 
} 
if (ReasonText != " ") 
{ 
    ReasonText = ReasonText.Substring(1); 
} 
+0

Спасибо Андрей V. Мне нужно значение только тега ReasonText. –

+0

@VikasKunte, я обновил xPath тоже. Не забывайте цитаты вокруг него. –

+1

Большое спасибо Андрею. Это сработало :-) –

0

Вы перебор <Reason> узлов и каждый раз, выбирая первый /BoxResult/Reason/ReasonText узел в документе (обратите внимание, что вы не используете свой xmln переменные в любом месте).

Кстати, вот короткая версия (заменяет весь ваш блок кода):

ReasonText += String.Join(";", 
          xmlDoc.SelectNodes("/BoxResult/Reason/ReasonText") 
           .Cast<XmlNode>() 
           .Select(n => n.InnerText)); 
Смежные вопросы