从XML获取订单项列表

时间:2013-05-07 15:27:49

标签: c# xml msmq econnect

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

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

(和其他一些尝试)没有成功......

这是XML,如何从" Line"获取一系列订单项?节点,以便我可以获得订单项详细信息?

 <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>

3 个答案:

答案 0 :(得分:2)

你的xml格式不正确。

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

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

var xdoc = XDocument.Parse(yourXml);
var nodes = xdoc.Descendants("Line");

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

答案 2 :(得分:0)

想出来:

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

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

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