System.Xml.XmlDocument
を超えるXPathで、隣接するテキストおよびCDataノードが見つからないのはなぜですか?System.Xml.XmlDocument上のXPathが隣接するテキストおよびCDataノードを検出しないのはなぜですか?
var raw_xml = @"
<root>
<test>
<![CDATA[This is a CDATA node]]>And this is an adjacent text node
</test>
</root>
";
var doc = new XmlDocument();
doc.LoadXml(raw_xml);
var results = doc.SelectNodes("/root/test/text()");
Console.WriteLine(results.Count); // gives: 1
Console.WriteLine(results[0].Value); // gives: This is a CDATA node
Console.WriteLine(results[0].Name); // gives: #cdata-section
Console.WriteLine(results[0].GetType().FullName); // gives: System.Xml.XmlCDataSection
Console.WriteLine(results[0].NextSibling.Name); // gives: #text
Console.WriteLine(results[0].NextSibling.Value.Trim()); // gives: And this is an adjacent text node
我々は、それが次の兄弟ですので、あなたが表現/root/test/text()
がそれを見つけるだろうと思うだろうとしてCDATAノードがテキストノードを持っていることを上から見ることができます。 XPathので
同じ結果は:/root/test/node()
「System.Xml.XmlDocument上のXPathが隣接するテキストおよびCDataノードを見つけられないのはなぜですか?」という問題を全体の問題として変更することを検討してください。答えは.NETフレームワークのDOM実装に固有であり、 "上記から、CDATAノードには次の兄弟のようにテキストノードがあることがわかります。したがって、/ root/test/text()式はXPATAデータモデルではCDATAを知らないノード。 –
@マーティン、良い点 - ありがとう。私はOPを更新しました:) –