1

我有这个xml:

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

我最初尝试了 <sub>.Value,但这会返回 sub 内的所有内容,然后返回执行相同操作的 <sub>.ToString。我搜索了一个解决方案,但到处都使用了 xmlElement.InnerText 但我需要它来处理不可用的 xElement。如何使用 xElement 的内部文本属性?

4

2 回答 2

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;
于 2012-11-28T21:09:16.130 回答
1

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

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;
于 2012-11-28T21:18:02.877 回答