xml - linq to xml 查询需要正确的语法
问题描述
我正在尝试进行查询以首先找到具有“名称”属性“条目”的节点“字段”。从那里我想获取作为有效负载子节点的两个字段节点的值是否有更好的方法来进行此查询?似乎我错过了一些可以轻松获得两个字段节点的东西,因此我可以枚举它们并获取它们的值。
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>
解决方案
我相信你的问题是你没有清楚地检查你的类型。query
是类型IEnumerable<IEnumerable<XElement>>
,因为from
...where
提供所有匹配项,然后您提供所有子匹配项。
如果您重新from
匹配子匹配,您将获得相当于 a 的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");
推荐阅读
- javascript - 如何将鼠标悬停在元素上然后使用赛普拉斯单击
- nginx - 使用 nginx 位置在一些静态页面旁边有一个反应应用程序
- php - grav cms : 包含 php 文件的树枝扩展
- python - 中心流光按钮
- javascript - 如何在 vanilla JavaScript 中切换多个类?
- android - 更新android studio 3.6后Databiding Unresolve参考
- javascript - 如何根据内部组件更改 props.data?
- android - setOnApplyWindowInsetsListener() 没有应用填充和调用 2 次
- reactjs - useEffect 优化,但当传递的数组发生变化时无法重新渲染
- http - 我可以在 Authorization 标头中同时使用 Basic 和 Bearer 吗?