在XDocument中抓取单个元素的文本(C#)

时间:2015-04-07 15:52:51

标签: c# xml linq linq-to-xml

我有一个类似于

的XML文档
<a>foo<b>bar</b></a>

使用上述XML创建XDocument,然后使用

doc.Descendants(new XName("a")).First().Value 

按照我的预期产生“foobar”而不是“foo”。

如何在不从<a />中减去<b />的值的情况下获取<a />的值?

提前致谢!

3 个答案:

答案 0 :(得分:3)

<a>实际上包含两个节点,一个文本节点和b元素。您可以将a个孩子过滤为XText类型:

var xml = "<a>foo<b>bar</b></a>";
var document = XDocument.Parse(xml);
Console.WriteLine(document.Descendants("a").First().Nodes().OfType<XText>().First().Value);

答案 1 :(得分:0)

似乎有点无效的XML。也许你应该尝试属性......这样的事情

<a name="foo">
<b>bar</b>
</a>

答案 2 :(得分:0)

这不是一个很好的答案,但我会质疑这个例子中XML的有效性。 考虑带有超链接的HTML段落的XML兼容标记:

<p>Go to the <a href="http://stackoverflow.com">StackOverflow</a> front page</p>

段落的内容(<p>的值)仍然是完整的句子,而不仅仅是单词&#34;转到&#34;。

另外,根据您的示例,如果 <b>bar</b>之后有更多文字,会发生什么?