簡體   English   中英

C#選擇節點找不到節點

[英]C# Select Nodes not finding nodes

我確定我在這里缺少一些簡單的東西,但是我已經努力了幾天。 我希望有人能指出我所缺少的。

我從外部來源收到以下格式的XML消息:

<root>
  <A>
    <B xmlns="http://www.something.com/Document>
      <C>Value1</C> 
      <D>Value2</D>
      <E>Value3</E>
    </B>
  </A>
  <A>
    <B xmlns="http://www.something.com/Document>
      <D>Value5</D>
      <E>Value6</E>
    </B>
  </A>
</root>

我正在嘗試提取D元素。

我試過了:

XmlNodeList xmlResults = xdPayload.SelectNodes("//D")

這沒有返回結果。 然后以為命名空間是我嘗試的問題:

XmlNamespaceManager nsmgr = new XmlNamespaceManager(xdPayload.NameTable);
xnlResults = xdPayload.SelectNodes("//D", nsmgr);

再次沒有結果。 我不認為我需要添加默認名稱空間,但是當認為智能不起作用時,請認為愚蠢。 所以我嘗試了這個:

XmlNamespaceManager nsmgr = new XmlNamespaceManager(xdPayload.NameTable);
nsmgr.AddNamespace("", "http://www.something.com/Document");
xnlResults = xdPayload.SelectNodes("//D", nsmgr);

仍然沒有結果。 我嘗試使用更具描述性的XPath,例如“ / root / A / B / D”和“ /root/A/B[@xmlns="http://www.somewhere.com/Document"]/D“也沒有結果。

我不確定我在這里缺少什么。 任何幫助表示贊賞。

嘗試添加以前綴命名的名稱空間,然后將<D>稱為ns0:D

NameTable nt = new NameTable();
XmlNamespaceManager nsmgr = new XmlNamespaceManager(nt);
nsmgr.AddNamespace("ns0", "http://www.something.com/Document");
xnlResults = xdPayload.SelectNodes("/root/A/ns0:B/ns0:D", nsmgr);

這應該選擇<D>元素進行進一步處理。


如果這不起作用,您將始終可以選擇忽略所有名稱空間,例如

XmlNodeList xmlResults = xdPayload.SelectNodes("//*[local-name()='D']")

使用XElement

string text = @"
    <root>
        <A>
        <B xmlns='http://www.something.com/Document'>
            <C>Value1</C> 
            <D>Value2</D>
            <E>Value3</E>
        </B>
        </A>
        <A>
        <B xmlns='http://www.something.com/Document'>
            <D>Value5</D>
            <E>Value6</E>
        </B>
        </A>
    </root>";

XNamespace ns = "http://www.something.com/Document";
var xml = XElement.Parse(text);
var ds = xml.Descendants(ns + "D");
ds.ToList().ForEach(Console.WriteLine);

我在同一個問題上苦苦掙扎。 關鍵是Descendants()方法。 由於您具有<root>元素,因此在開始引用<A><B>元素之前,您已經進行了一個級別的挖掘。

暫無
暫無

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

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