2

我的 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 并连接原因文本数据。

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

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

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 Sender ;未知发件人

它不显示未知的接收者

请提供建议,您的帮助将很有用

4

2 回答 2

1

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

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

ReasonText += String.Join(";",
                          xmlDoc.SelectNodes("/BoxResult/Reason/ReasonText")
                                .Cast<XmlNode>()
                                .Select(n => n.InnerText));
于 2013-11-14T08:35:57.177 回答
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);
}
于 2013-11-14T08:21:47.277 回答