我的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);
}
我从此代码获得的输出是未知发件人;未知发件人
未显示未知接收器
请提供建议并提供帮助
答案 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));