连接XML节点数据

时间:2013-11-14 08:20:23

标签: c# .net xml

我的XML看起来像这样

<BoxResult>
<DocumentType>BCN</DocumentType>
<DocumentID>BCN_20131113_1197005001#854@11XEZPADAHANDELC</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并连接Reason Text Data。

基本上,我需要输出为未知发件人;未知接收者

我尝试了以下代码,但我没有得到所需的输出

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);
}

我从此代码获得的输出是未知发件人;未知发件人

未显示未知接收器

请提供建议并提供帮助

2 个答案:

答案 0 :(得分: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);
}

答案 1 :(得分:1)

您正在遍历<Reason>个节点,每次选择文档中的第一个/BoxResult/Reason/ReasonText节点时(请注意,您未在任何地方使用xmln变量)。

顺便说一句,这是一个较短的版本(替换整个代码块):

ReasonText += String.Join(";",
                          xmlDoc.SelectNodes("/BoxResult/Reason/ReasonText")
                                .Cast<XmlNode>()
                                .Select(n => n.InnerText));