选择“使用 linq to xml 查询的元素”
本文关键字:查询 元素 xml to 使用 linq 选择 | 更新日期: 2023-09-27 18:34:24
需要从 xml 标签 OperationName 中捕获所有元素,不包括 OperationName 标签本身,即
<testdata>
<EPPublicCall>
<OperationName>
<server xmlns="http://docs.openstack.org/compute/api/v1.1" imageRef="3afe97b2-26dc-49c5-a2cc-a2fc8d80c001" flavorRef="2" name="api-test-server-xml2"/>
</OperationName>
<OperationType>Public</OperationType>
</EPPublicCall>
需要在下面获取
<server xmlns="http://docs.openstack.org/compute/api/v1.1" imageRef="3afe97b2-26dc-49c5-a2cc-a2fc8d80c001" flavorRef="2" name="api-test-server-xml2"/>
尝试使用以下查询,但它也在获取我不想要的操作名称
var doc = XDocument.Load("C:''TestData.xml");
return
from vars in doc.Descendants("EPPublicCall")
let operationName = vars.Elements("OperationName")
select new object[] { operationName };
对此有什么想法吗?
如果您只想要OperationName
的直系后代而不知道它们是什么,只需在可枚举的 XElements 上添加对 .Elements()
方法的调用,不带参数:
return
from vars in doc.Descendants("EPPublicCall")
let operationName = vars.Elements("OperationName")
select new object[] { operationName.Elements() };
或者,如果你想要一个更简单的返回对象:
return doc.Descendants("EPPublicCall").Elements("OperationName").Elements();
这将解析为IEnumerable<XElement>
而不是包含IEnumerable<XElement>
的IEnumerable<object[]>
。
您可以通过指定命名空间来使用Descendants
方法:
XNamespace ns = "http://docs.openstack.org/compute/api/v1.1";
var elements = doc.Descendants(ns + "server").ToList();