簡體   English   中英

C# XDocument 元素/元素返回 null

[英]C# XDocument Element/Elements returns null

我正在嘗試使用 XDocument 讀取 XML 文件。 我嘗試了很多嘗試加載它,但似乎一切都返回 null。 第一次嘗試:

    var doc = XDocument.Load(path);

    var graphml = doc.Root.Element("graphml"); //null
    foreach (var keyElement in graphml.Elements("key")) //exception
      ...
    XElement graph = doc.Element("graph"); //null
    foreach (var nodeElement in graph.Elements("node")) //exception
     ...

另一個:

    var doc = XDocument.Load(path);
    XName xNameKey = XName.Get("key", doc.Root.GetDefaultNamespace().NamespaceName);

    foreach (var keyElement in doc.Elements(xNameKey)) //null
    ...

我的 XML 看起來像這樣:

<?xml version="1.0" encoding="utf-8"?>
<graphml xmlns="http://graphml.graphdrawing.org/xmlns">
  <key id="pr" for="edge" attr.name="preference" attr.type="int" />
...
  <graph id="G" edgedefault="undirected">
    <node id="st1" />
    <node id="st2" />
    ...
  </graph>
</graphml>

關於我做錯了什么的任何想法?

在您的第一個示例中doc.Root已經為您提供了<graphml>元素。 根下沒有具有該名稱的元素,因此在這種情況下doc.Root.Element("graphml")將返回 null。

要完成您的第一個示例,它應該如下所示: 注意 XNamespace 添加。

var graphml = doc.Root;
var ns = (XNamespace)"http://graphml.graphdrawing.org/xmlns";
foreach (var keyElement in graphml.Elements(ns + "key")) 
{
   keyElement.Dump();
}

在您的第二個示例中,您忘記包含您正確使用的 Root

var xNameKey = XName.Get("key", doc.Root.GetDefaultNamespace().NamespaceName);

當您開始迭代元素時,請對 Root 元素進行迭代:

foreach (var keyElement in doc.Root.Elements(xNameKey))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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