c# - 一个关于 LINQ to XML 的简单问题

标签 c# .net linq-to-xml namespaces

<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 元素是行不通的。)

关于c# - 一个关于 LINQ to XML 的简单问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3084264/

相关文章:

c# - 从 SQL Server 插入到 Access

c# - 通过 WCF 服务公开 Entity Framework

c# - 当只有 xml 数据可用时,如何使用 LINQ to XML 插入新节点?

c# - 向此 xml 结构中添加一个元素

c# - Web Api 2 - 自定义数据类型 JSON 序列化

c# - 任务排序的不同方式

c# - 在 C# 中压缩字符串并在 python 中解压缩

c# - 我的文本框上没有显示水平滚动条

.net - 将 SSRS .RDL 渲染为 PDF 并打开它

c# - Linq to xml 后代