我正在尝试查询以首先找到具有“名称”属性“条目”的节点“字段”。从那里我想获得两个字段节点的值,它们是有效负载的子级。是否有更好的方法进行此查询?似乎我缺少一些可以轻松获得两个字段节点的东西,因此我可以对它们进行枚举并获取它们的值。
var query = from el in xDoc.Root.Descendants(vz + "field")
where (string)el.Attribute("name") == "entries"
select el.Descendants(vz + "field");
我的示例XML:
<?xml version="1.0" encoding="UTF-8"?>
<payload xmlns="http://www.vz.com/types" model="http://10.232.xx.xxx/model/template/61ac3a8b-8e0b-45a0-910b-5929ecc73814">
<field name="id">
<value>61ac3a8b-8e0b-45a0-910b-5929ecc73814</value>
</field>
<field name="name">
<value>AddOn</value>
</field>
<field name="sort-id" />
<field name="stage-id" />
<field name="type-id" />
<field name="modification-date" />
<field name="modified-by" />
<field name="comment" />
<field name="version" />
<field name="group-id" />
<field name="export-rule" />
<field name="entries">
<list>
<payload>
<field label="FID" name="12abca0d-117f-4046-9f30-f38537a02576">
<value>USGOV000356</value>
</field>
<field label="VosModifiedDate" name="19a282a6-d0f0-4096-b630-ed16aedd1a15">
<value>11/15/2017 9:50:21 AM</value>
</field>
</payload>
</list>
</field>
</payload>
答案 0 :(得分:0)
我相信您的问题是您没有明确检查类型。 query
的类型为IEnumerable<IEnumerable<XElement>>
,因为from
... where
提供了所有匹配项,然后您提供了所有子匹配项。
如果您重新from
个子匹配项,您将获得一个SelectMany
的等同项,它将合并所有IEnumerable<XElement>
个子匹配项。
var query = from el in xDoc.Root.Descendants(vz + "field")
where el.Attribute("name").Value == "entries"
from eld in el.Descendants(vz + "field")
select eld;
或者,您可以选择顶级field
元素的第一个匹配项,然后获取其field
后代:
var query = (from el in xDoc.Root.Descendants(vz + "field")
where el.Attribute("name").Value == "entries"
select el)
.First()
.Descendants(vz + "field");