[英]A simple question about LINQ to XML
<root xmlns:h="http://www.w3.org/TR/html4/"
xmlns:f="http://www.w3schools.com/furniture">
<h:table>
<h:tr>
<h:td>Apples</h:td>
<h:td>Bananas</h:td>
</h:tr>
</h:table>
<f:table>
<f:name>African Coffee Table</f:name>
<f:width>80</f:width>
<f:length>120</f:length>
</f:table>
</root>
我正在尝试练习LinqToXml,但我不知道自己想要什么。仅如何查询具有h或f名称空间的表元素? 这就是我尝试过的方法。我也尝试了其他方法,但是没有用。
var query = from item in XDocument.Parse(xml).Elements(ns + "table")
select item;
这将不起作用,因为您缺少查询中的root
元素。 这将工作:
XNamespace ns = "http://www.w3schools.com/furniture";
var query = XDocument.Parse(xml).Element("root").Elements(ns + "table");
现在,如果问题在于您想查找所有 “表”元素而不管名称空间如何 ,那么您将需要这样的东西:
var query = XDocument.Parse(xml)
.Element("root")
.Elements()
.Where(element => element.Name.LocalName == "table");
(编辑:如前所述,您可以根据需要使用XDocument.Root
来获取根元素。重要的一点是,试图直接从文档节点本身获取table
元素是行不通的。)
命名空间前缀不能保证是特定的字母或字符串。 最好的方法是按合格的名称空间进行搜索。
这将获取XElement xml
所有直接子节点,其中名称空间为uri:namespace
...
var selectedByNamespace = from element in xml.Elements()
where element.Name.NamespaceName == "uri:namespace"
select element;
另一个选择是根据完全限定的名称选择元素。
var ns = "{uri:namespace}";
var selectedElements = xml.Elements(ns + "table");
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.