使用linq或xpath获取xml中的所有文本节点

cae*_*sar 4 c# xml linq xpath

我正在尝试从任何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)

有人知道如何解决这个问题吗?任何回应将不胜感激.

Mar*_*nen 6

您可以使用LINQ to XML和

XDocument doc = XDocument.Load("file.xml");
IEnumerable<XText> textNodes = doc.DescendantNodes().OfType<XText>();
Run Code Online (Sandbox Code Playgroud)