我有这个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的内部文本属性?
答案 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;