我有一个从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>
答案 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”元素。