C# XML 查找第一个元素后代
C# XML find first Element descendants
寻找第一个 item
的 categoryId
和 categoryName
。
它也可能 return 没有产品。
XML 看起来像这样
<findItemsByKeywordsResponse xmlns="http://...">
<ack>Success</ack>
<version>1.13.0</version>
<timestamp>2016-11-10T17:48:21.321Z</timestamp>
<searchResult count="1">
<item>
<itemId>12354</itemId>
<title>ABCD#</title>
<globalId>ddd</globalId>
<primaryCategory>
<categoryId>**1234**</categoryId>
<categoryName>**Catg Nameee**</categoryName>
</primaryCategory>
</item>
</searchResult>
<paginationOutput>
</paginationOutput>
</findItemsByKeywordsResponse>
完整 xml here
因为您的根元素定义了命名空间,所以在搜索后代项时您应该做的是指定命名空间:
XNamespace ns = @"http://www.ebay.com/marketplace/search/v1/services";
var result = XDocument.Load("data.xml")
.Descendants(ns + "item")
.FirstOrDefault()?.Element(ns + "primaryCategory");
var categoryId = result?.Element(ns + "categoryId")?.Value;
var categoryName = result?.Element(ns + "categoryName")?.Value;
您还可以使用 C# 6.0 空传播 (?:
) 以更优雅的方式检索 <primaryCategory>
。请记住,如果您没有 <item>
标签或 <primaryCategory>
标签,结果将等于 null
此外,尝试找到第一个回答某些谓词的 <item>
可能更有意义。如果是这种情况,请将 .FirstOrDefault()
更改为:
.FirstOrDefault(item => item.Element("itemId").Value == "12345")
例如
寻找第一个 item
的 categoryId
和 categoryName
。
它也可能 return 没有产品。
XML 看起来像这样
<findItemsByKeywordsResponse xmlns="http://...">
<ack>Success</ack>
<version>1.13.0</version>
<timestamp>2016-11-10T17:48:21.321Z</timestamp>
<searchResult count="1">
<item>
<itemId>12354</itemId>
<title>ABCD#</title>
<globalId>ddd</globalId>
<primaryCategory>
<categoryId>**1234**</categoryId>
<categoryName>**Catg Nameee**</categoryName>
</primaryCategory>
</item>
</searchResult>
<paginationOutput>
</paginationOutput>
</findItemsByKeywordsResponse>
完整 xml here
因为您的根元素定义了命名空间,所以在搜索后代项时您应该做的是指定命名空间:
XNamespace ns = @"http://www.ebay.com/marketplace/search/v1/services";
var result = XDocument.Load("data.xml")
.Descendants(ns + "item")
.FirstOrDefault()?.Element(ns + "primaryCategory");
var categoryId = result?.Element(ns + "categoryId")?.Value;
var categoryName = result?.Element(ns + "categoryName")?.Value;
您还可以使用 C# 6.0 空传播 (?:
) 以更优雅的方式检索 <primaryCategory>
。请记住,如果您没有 <item>
标签或 <primaryCategory>
标签,结果将等于 null
此外,尝试找到第一个回答某些谓词的 <item>
可能更有意义。如果是这种情况,请将 .FirstOrDefault()
更改为:
.FirstOrDefault(item => item.Element("itemId").Value == "12345")
例如