如何在不获取子元素的情况下获取XElement
的值?
一个例子:
<?xml version="1.0" ?>
<someNode>
someValue
<child>1</child>
<child>2</child>
</someNode>
如果我对<someNode>
使用XElement.Value,我会收到"somevalue<child>1</child><child>2<child>"
字符串,但我想只获得“somevalue”而没有"<child>1</child><child>2<child>"
子字符串。
答案 0 :(得分:11)
您可以比使用Descendants
稍微简单一点 - Nodes
方法只返回直接子节点:
XElement element = XElement.Parse(
@"<someNode>somevalue<child>1</child><child>2</child></someNode>");
var firstTextValue = element.Nodes().OfType<XText>().First().Value;
请注意,即使在子元素文本节点之前的情况下,这也会起作用,如下所示:
XElement element = XElement.Parse(
@"<someNode><child>1</child><child>2</child>some value</someNode>");
var firstTextValue = element.Nodes().OfType<XText>().First().Value;
答案 1 :(得分:3)
没有直接的方法。你必须迭代并选择。例如:
var doc = XDocument.Parse(
@"<someNode>somevalue<child>1</child><child>2</child></someNode>");
var textNodes = from node in doc.DescendantNodes()
where node is XText
select (XText)node;
foreach (var textNode in textNodes)
{
Console.WriteLine(textNode.Value);
}
答案 2 :(得分:0)
我认为你想要的是第一个后代节点,所以像:
var value = XElement.Descendents.First().Value;
XElement
是表示<someNode>
元素的元素。
你可以特别要求第一个文本元素(“somevalue”),所以你也可以这样做:
var value = XElement.Descendents.OfType<XText>().First().Value;