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

Grabbing text of a single element in XDocument (C#)

我有一个 XML 文件看起来像

<a>foo<b>bar</b></a>

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

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

结果 "foobar" 而不是我预期的 "foo"。

如何在不从 <a /> 中减去 <b /> 的值的情况下只得到 <a /> 的值?

提前致谢!

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

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

这不是一个完整的答案,但我会质疑您在此示例中 XML 的有效性。 考虑带有超链接的 HTML 段落的 XML 兼容标记:

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

段落的内容(<p> 的值)仍然是完整的句子,而不仅仅是单词 "go to the "。

此外,根据您的示例,如果在 <b>bar</b> 之后有更多文本会怎样?

<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);