Warum XPath über ein System.Xml.XmlDocument
nicht neben Text und CData Knoten finden?Warum findet XPath über ein System.Xml.XmlDocument keinen angrenzenden Text und keine CData-Knoten?
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
Wir können aus dem oben sehen, dass der CDATA-Knoten den Textknoten hat, wie es nächstes Geschwister ist, so würden Sie denken, dass der Ausdruck /root/test/text()
würde es finden.
gleiche Ergebnisse mit XPath: /root/test/node()
Betrachten wir die Frage 'Warum XPath über einen System.Xml.XmlDocument nicht neben Text zu ändern und CData Knoten finden?' Wie das ganze Problem und Ihre Antwort auf die DOM-Implementierung im .NET Framework und Ihre Annahme spezifischer "Wir können von oben sehen, dass der CDATA-Knoten den Textknoten als nächstes Geschwister hat, also würden Sie denken, dass der Ausdruck/root/test/text()" keine Basis im XPath-Datenmodell hat, das keine CDATA kennt Knoten. –
@Martin, guter Punkt - danke. Ich habe das OP aktualisiert :) –