遍历 XElement 项
Looping through XElement items
我有以下 XML:
<ArrayOfCustomerOrderExportInfo>
<CustomerOrderExportInfo>
<ID>168</ID>
<CustomerOrderLines>
<CustomerOrderExportInfo>
<Amount>1522</Amount>
</CustomerOrderExportInfo>
<CustomerOrderExportInfo>
<Amount>1522</Amount>
</CustomerOrderExportInfo>
...
</CustomerOrderLines>
</CustomerOrderExportInfo>
</ArrayOfCustomerOrderExportInfo>
我这样循环:
using System.Linq
using System.XML.Linq
Stream xmlUpload = <file>
var customerOrders = from co in
XElement.Load(xmlUpload).Eelements("CustomerOrderExportInfo")
select co;
xmlUpload.Close
foreach(var orderXML in customerOrders)
{
int orderID = Convert.ToInt32(orderXML.Element("ID").Value);
}
这给我 ID 168 没问题。
现在我想在现有的 foreach 循环中遍历 CustomerOrderExportInfo 项,然后它失败了。
我试过了
var customerOrderLine = orderXML.Descendants("CustomerOrderExportInfo")
但这给出了一个空集合。
还有各种 orderXML.Nodes() 但总是空的集合。
感谢指点和帮助
亲切的问候
杰伦
有趣,
如果我尝试将它放在一个变量中,它会失败:
var test = orderXML.Descendants("CustomerOrderLineExportInfo");
但像这样:
foreach(var orderLine in orderXML.Descendants("CustomerOrderLineExportInfo"))
{
...
}
我可以遍历记录
杰伦
抱歉 VB... 第一部分是加载 XElement。遗憾的是 C# 不允许 XML 文字。 (如果我是一名 C# 程序员,我将不得不拥有一个 VB 模块才能拥有 XML 文字;)
添加了一些测试数据。
Dim xe As XElement
'to load from a file
' xe = XElement.Load("Your Path Here")
' for testing
xe = <ArrayOfCustomerOrderExportInfo>
<CustomerOrderExportInfo>
<ID>168</ID>
<CustomerOrderLines>
<CustomerOrderExportInfo>
<Amount>1522</Amount>
</CustomerOrderExportInfo>
<CustomerOrderExportInfo>
<Amount>2522</Amount>
</CustomerOrderExportInfo>
</CustomerOrderLines>
</CustomerOrderExportInfo>
<!-- for testing -->
<CustomerOrderExportInfo>
<ID>9999</ID>
<CustomerOrderLines>
<CustomerOrderExportInfo>
<Amount>991</Amount>
</CustomerOrderExportInfo>
<CustomerOrderExportInfo>
<Amount>992</Amount>
</CustomerOrderExportInfo>
</CustomerOrderLines>
</CustomerOrderExportInfo>
</ArrayOfCustomerOrderExportInfo>
加载后,您可以做很多有趣的事情。首先是获取所有外部 CustomerOrderExportInfo。
Dim outerCOI As IEnumerable(Of XElement)
outerCOI = xe.<CustomerOrderExportInfo>
然后您可以查看它们并获取内部 CustomerOrderExportInfo
Dim innerCOI As IEnumerable(Of XElement)
For Each el As XElement In outerCOI
innerCOI = el...<CustomerOrderExportInfo>
Next
最后,如果您只想获取 CustomerOrderExportInfo 中的所有 CustomerOrderExportInfo,您可以这样做。请注意如何从元素访问 ID。
innerCOI = xe.<CustomerOrderExportInfo>...<CustomerOrderExportInfo>
For Each el As XElement In innerCOI
Debug.WriteLine(el.Parent.Parent.<ID>.Value)
Debug.WriteLine(el.<Amount>.Value)
Next
我有以下 XML:
<ArrayOfCustomerOrderExportInfo>
<CustomerOrderExportInfo>
<ID>168</ID>
<CustomerOrderLines>
<CustomerOrderExportInfo>
<Amount>1522</Amount>
</CustomerOrderExportInfo>
<CustomerOrderExportInfo>
<Amount>1522</Amount>
</CustomerOrderExportInfo>
...
</CustomerOrderLines>
</CustomerOrderExportInfo>
</ArrayOfCustomerOrderExportInfo>
我这样循环:
using System.Linq
using System.XML.Linq
Stream xmlUpload = <file>
var customerOrders = from co in
XElement.Load(xmlUpload).Eelements("CustomerOrderExportInfo")
select co;
xmlUpload.Close
foreach(var orderXML in customerOrders)
{
int orderID = Convert.ToInt32(orderXML.Element("ID").Value);
}
这给我 ID 168 没问题。
现在我想在现有的 foreach 循环中遍历 CustomerOrderExportInfo 项,然后它失败了。
我试过了
var customerOrderLine = orderXML.Descendants("CustomerOrderExportInfo")
但这给出了一个空集合。 还有各种 orderXML.Nodes() 但总是空的集合。
感谢指点和帮助
亲切的问候
杰伦
有趣,
如果我尝试将它放在一个变量中,它会失败:
var test = orderXML.Descendants("CustomerOrderLineExportInfo");
但像这样:
foreach(var orderLine in orderXML.Descendants("CustomerOrderLineExportInfo"))
{
...
}
我可以遍历记录
杰伦
抱歉 VB... 第一部分是加载 XElement。遗憾的是 C# 不允许 XML 文字。 (如果我是一名 C# 程序员,我将不得不拥有一个 VB 模块才能拥有 XML 文字;)
添加了一些测试数据。
Dim xe As XElement
'to load from a file
' xe = XElement.Load("Your Path Here")
' for testing
xe = <ArrayOfCustomerOrderExportInfo>
<CustomerOrderExportInfo>
<ID>168</ID>
<CustomerOrderLines>
<CustomerOrderExportInfo>
<Amount>1522</Amount>
</CustomerOrderExportInfo>
<CustomerOrderExportInfo>
<Amount>2522</Amount>
</CustomerOrderExportInfo>
</CustomerOrderLines>
</CustomerOrderExportInfo>
<!-- for testing -->
<CustomerOrderExportInfo>
<ID>9999</ID>
<CustomerOrderLines>
<CustomerOrderExportInfo>
<Amount>991</Amount>
</CustomerOrderExportInfo>
<CustomerOrderExportInfo>
<Amount>992</Amount>
</CustomerOrderExportInfo>
</CustomerOrderLines>
</CustomerOrderExportInfo>
</ArrayOfCustomerOrderExportInfo>
加载后,您可以做很多有趣的事情。首先是获取所有外部 CustomerOrderExportInfo。
Dim outerCOI As IEnumerable(Of XElement)
outerCOI = xe.<CustomerOrderExportInfo>
然后您可以查看它们并获取内部 CustomerOrderExportInfo
Dim innerCOI As IEnumerable(Of XElement)
For Each el As XElement In outerCOI
innerCOI = el...<CustomerOrderExportInfo>
Next
最后,如果您只想获取 CustomerOrderExportInfo 中的所有 CustomerOrderExportInfo,您可以这样做。请注意如何从元素访问 ID。
innerCOI = xe.<CustomerOrderExportInfo>...<CustomerOrderExportInfo>
For Each el As XElement In innerCOI
Debug.WriteLine(el.Parent.Parent.<ID>.Value)
Debug.WriteLine(el.<Amount>.Value)
Next