簡體   English   中英

有關LINQ to XML的簡單問題

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM