我正在尝试从任何XML获取所有文本节点.所以我需要代码有点动态.
以下是我需要处理的许多不同XML中的两个.
<questionset>
<!-- 1 -->
<question id="1" returnOnIncorrect="false" vo="" img="">
<![CDATA[
ddddddddd?
]]>
<!-- a -->
<answer id="1" correct="0">
<input>
<![CDATA[
eeeeeeeeee
]]>
</input>
<output>
<![CDATA[
iiiiiiiii.
]]>
</output>
</answer>
</question>
</questionset>
Run Code Online (Sandbox Code Playgroud)
其他XML
<xml>
<content>
<layout layoutId="0" copyFromId="0">
<text indent="1" containerId="0">aaaaaaaa</text>
<sound src="assets/SND_29c.mp3" />
<img src="assets/IMG_29c.jpg" />
<text indent="1" containerId="0">bbbbbbb</text>
<sound src="assets/SND_29d.mp3" />
<text indent="1" containerId="0">cccccccc</text>
</layout>
</content>
</xml>
Run Code Online (Sandbox Code Playgroud)
我想知道是否可以使用XPath或Linq获取所有文本节点.
尝试将XPath与"// text()"一起使用,但这不会获得CDATA节点内的文本.
UPDATE PreserveWhitespace是真的
然后我使用以下查询尝试使用Linq,但没有运气:
var xxml = XElement.Load(this.m_folder + "\\" + item.DisplayName);
var query =
from e in xxml.Descendants()
where e.NodeType==XmlNodeType.CDATA
select e;
Run Code Online (Sandbox Code Playgroud)
有人知道如何解决这个问题吗?任何回应将不胜感激.
您可以使用LINQ to XML和
XDocument doc = XDocument.Load("file.xml");
IEnumerable<XText> textNodes = doc.DescendantNodes().OfType<XText>();
Run Code Online (Sandbox Code Playgroud)