0

我有一个从 MSMQ 中提取的 eConnect 传出文档,我需要遍历行项目。我试过了:

 XmlNodeList nodes = root.SelectNodes("/Sales_History_Transaction/eConnect/SO_Hist_Trans/Line");

(以及其他几次尝试)没有成功......

这是 XML,我如何从“行”节点获取行项目的集合,以便我可以获取行项目详细信息?

 <Sales_History_Transaction:root>
   <eConnect ACTION="1" Requester_DOCTYPE="Sales_History_Transaction" DBNAME="TWO"        TABLENAME="SOP30200" DATE1="2013-05-03T09:24:09.970" SOPNUMBE="999999" SOPTYPE="3">
      <SO_Hist_Trans>
            <SOPNUMBE>999999</SOPNUMBE>
            <SOPTYPE>3</SOPTYPE>
           <Line>
                <CMPNTSEQ>0</CMPNTSEQ>
                <LNITMSEQ>998777</LNITMSEQ>
                <ITEMNMBR>0099999</ITEMNMBR>
                <ITEMDESC>Laptop</ITEMDESC>
           </Line>
           <Line>
                <CMPNTSEQ>0</CMPNTSEQ>
                <LNITMSEQ>777</LNITMSEQ>
                <ITEMNMBR>0099</ITEMNMBR>
                <ITEMDESC>Desktop</ITEMDESC>
           </Line>
           <Line>
                <CMPNTSEQ>0</CMPNTSEQ>
                <LNITMSEQ>679777</LNITMSEQ>
                <ITEMNMBR>0569</ITEMNMBR>
                <ITEMDESC>Memory</ITEMDESC>
           </Line>
      </SO_Hist_Trans>
    </eConnect>
   </Sales_History_Transaction:root>
4

3 回答 3

2

您的 xml 格式不正确。

根标签似乎由一个未声明的命名空间Sales_History_Transaction和元素名称组成root。您是否错过了Sales_History_Transaction定义的行?

一旦你有了有效的 xml,它应该很简单(取决于命名空间):

var xdoc = XDocument.Parse(yourXml);
var nodes = xdoc.Descendants("Line");
于 2013-05-07T15:38:27.147 回答
1

这对你的例子有用吗?或者这与您尝试的失败相同?

XmlDocument doc1 = new XmlDocument();
doc1.Load("yoururl"); //I don't know from where you load

XmlElement root = doc1.DocumentElement;
XmlNodeList nodes = root.SelectNodes("/Sales_History_Transaction/eConnect/SO_Hist_Trans/Line");
foreach (XmlNode node in nodes) {
    Console.Out.WriteLine(node["CMPNTSEQ"].InnerText);
    Console.Out.WriteLine(node["LNITMSEQ"].InnerText);
    Console.Out.WriteLine(node["ITEMNMBR"].InnerText);
    Console.Out.WriteLine(node["ITEMDESC"].InnerText);
    Console.Out.WriteLine("------------------------");
}
于 2013-05-07T17:27:34.243 回答
0

弄清楚了:

XmlNodeList nodes = xmlDocument.GetElementsByTagName("Line");

foreach (XmlNode node in nodes)
{
  string txt = node["ElementName"].InnerText;
}

这将枚举 XML 中的所有“Line”元素。

于 2013-05-07T18:10:28.410 回答