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 を解析して 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);
}

このコードから得られる出力はUnknown Sender です。不明な送信者

不明な受信者が表示されない

アドバイスしてください、あなたの助けが役に立ちます

4

2 に答える 2

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 に答える
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 に答える