仅获取xml节点的文本

时间:2012-11-28 20:56:19

标签: .net xml

我有这个xml:

    <root>      
      <sub>maintext1
        <subsub>subtext1</subsub>
        <subsub>subtext2</subsub>
      </sub>          
    </root>

我最初尝试过&lt; sub&gt; .Value,但这会返回sub中的所有内容,然后&lt; sub&gt; .ToString做同样的事情。我搜索了一个解决方案,但到处都使用了xmlElement.InnerText,但是我需要它才能获得xElement。如何使用xElement的内部文本属性?

2 个答案:

答案 0 :(得分:1)

maintext1创建一个文本节点,因此您可以执行以下操作:

var xml = @"<root>      
<sub>maintext1
<subsub>subtext1</subsub>
<subsub>subtext2</subsub>
</sub>          
</root>";
var doc = XDocument.Parse(xml);
var txt = (IEnumerable<object>)doc.XPathEvaluate("/root/sub/text()");
var textNode = (XText)txt.First();
Console.WriteLine(textNode.Value);

请注意,您需要为此导入以下名称空间进行编译:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Xml.Linq;
using System.Xml.XPath;

答案 1 :(得分:1)

您可以在XElement方法的返回值上使用OfType Linq扩展名来获取特定类型Nodes的所有节点。

XElement.Nodes().OfType<XText>()

这个例子得到了你正在寻找的价值,我想:

var xml = 
    @"<root>      
       <sub>maintext1
        <subsub>subtext1</subsub>
        <subsub>subtext2</subsub>
       </sub>          
      </root>";
var xel = XElement.Parse(xml);
var textNodes = xel.Element("sub").Nodes().OfType<XText>();
var mainText1 = textNodes.First().Value;
相关问题