[英]LINQ to XML pairing up two nodes inside XML document to a list or dictionary
我有一個XML文檔,基本上像這樣:
<Item>
<ItemID>1234567890</ItemID>
<ItemSpecifics>
<NameValueList>
<Name>Style</Name>
<Value>mens</Value>
</NameValueList>
<NameValueList>
<Name>UPC</Name>
<Value>123456789</Value>
</NameValueList>
</ItemSpecifics>
</Item>
並且“ Item”節點在整個XML文檔中重復其自身,具有多個ItemID值和UPC值。
我在這里想要做的是從每個Item節點中提取ItemID值及其UPC值。因此,輸出將是這樣的(包含列表或字典):
ItemID UPC
1 598
2 2134
3 9999
等等..
我已經嘗試過這樣的事情:
var document = XDocument.Parse(xmlString);
var upcValues = document.Descendants("NameValueList")
.Where(pair => pair.Element("Name").Value == "UPC")
.Select(pair => pair.Element("Value").Value)
.DefaultIfEmpty("n/a");
但這並不能真正達到我想要的目的,因為我不確定如何從文檔中同時提取ID和UPC值。
有人可以幫我嗎 ?
您需要從Item
開始,因為那是您最后想要的每個條目的根。 您還需要提供元素的名稱空間,這在文檔的根元素中是默認的。 所以像這樣:
XNamespace ns = "urn:ebay:apis:eBLBaseComponents";
var upcValues = document
.Descendants(ns + "Item")
.ToDictionary(
item => (string) item.Element(ns + "ItemID"),
item => (string) item.Elements(ns + "NameValueList")
.Single(nvl => (string) nvl.Element(ns + "Name") == "UPC")
.Element(ns + "Value"));
第一個lambda表達式從ItemID
元素中選擇dictionary元素中的鍵。 第二個lambda表達式通過查找唯一的NameValueList
元素和一個Name
值為“ NPC”的NameValueList
元素來選擇字典元素中的值,然后采用該NameValueList
的Value
元素值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.