我有以下xml文件:
<PackList>
<Header>
<OrderNumber>PO12123</OrderNumber>
<OrderQty>100</OrderQty>
</Header>
<Items>
<Item>
<PN>31023312</PN>
<Color>Black</Color>
</Item>
<Item>
<PN>22023312</PN>
<Color>White</Color>
</Item>
<Item>
<PN>44023312</PN>
<Color>Blue</Color>
</Item>
</Items>
</PackList>
我可以使用以下代码阅读Header
部分:
public class OrderItem
{
public string PN { get; set; }
public string Color { get; set; }
}
public class PList
{
public string OrderNumber { get; set; }
public int OrderQty { get; set; }
public List<OrderItem> OrderItems = new List<OrderItem>();
}
(...)
PList PL = new PList();
using (XmlReader reader = XmlReader.Create(@"c:/Test/PackList.xml"))
{
reader.ReadToFollowing("OrderNumber");
PList.OrderNumber = reader.ReadElementContentAsString();
reader.ReadToFollowing("OrderQty");
PList.OrderQty = reader.ReadElementContentAsInt();
}
(...)
但我不知道如何阅读Item
标记内的每个Items
。
有什么建议吗?
答案 0 :(得分:1)
查看XmlReader。 ReadSubtree()方法。
返回一个可用于读取当前内容的新XmlReader实例 节点及其所有后代。
https://msdn.microsoft.com/en-us/library/system.xml.xmlreader.readsubtree(v=vs.110).aspx
注意:也可能会移动主读者的位置,因此您将继续处于ReadToFollowing()得到的位置。
答案 1 :(得分:1)
reader.ReadToFollowing("OrderNumber");
plist.OrderNumber = reader.ReadElementContentAsString();
reader.ReadToFollowing("OrderQty");
plist.OrderQty = reader.ReadElementContentAsInt();
reader.ReadToFollowing("Items");
using (var innerReader = reader.ReadSubtree())
{
while (innerReader.ReadToFollowing("PN"))
{
var item = new OrderItem();
item.PN = innerReader.ReadElementContentAsString();
reader.ReadToFollowing("Color");
item.Color = innerReader.ReadElementContentAsString();
plist.OrderItems.Add(item);
}
}
reader.ReadToFollowing("foo");
var foo = reader.ReadElementContentAsString();
其中foo
是Items
后的标记名称。
不要忘记plist.OrderItems = new List<OrderItem>();
答案 2 :(得分:0)
使用XmlNodeList
XmlDocument document = new XmlDocument();
document.Load(@"c:/Test/PackList.xml");
XmlNodeList Items = document.GetElementsByTagName("Item");
foreach (XmlNode item in Items)
{
// do something
}