需要捕获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"/>
尝试使用以下查询,但它也提取了我不想要的OperationName
var doc = XDocument.Load("C:\\TestData.xml");
return
from vars in doc.Descendants("EPPublicCall")
let operationName = vars.Elements("OperationName")
select new object[] { operationName };
对此有何想法?
答案 0 :(得分:1)
如果您只想要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<object[]>
的{{1}}来解析。
答案 1 :(得分:0)
您可以通过指定命名空间来使用Descendants
方法:
XNamespace ns = "http://docs.openstack.org/compute/api/v1.1";
var elements = doc.Descendants(ns + "server").ToList();