c# - 如何从 XDocument 获取文本值?

标签 c# xml xml-serialization

我有一个 XDocument。例如,

<cars>
<name>
<ford>model1</ford>
   textvalue   
<renault>model2</renault>
</name>
</cars>

如何从 XDocument 中获取文本值?如何识别元素中的textvalue

最佳答案

XLinq 将文本值解释为 XText。因此,您可以轻松检查节点是否属于 XText 类型或通过检查 NodeType 参见:

// get all text nodes
var textNodes = document.DescendantNodes()
                        .Where(x => x.NodeType == XmlNodeType.Text);

然而,我突然想到,你只想找到那段看起来有点孤独的名为textvalue 的文本。没有真正的方法来识别这个有效但不寻常的东西。您可以检查父节点是否命名为“name”,或者 textNode 本身是否单独或看不到:

// get 'lost' textnodes
var lastTextNodes = document.DescendantNodes()
                            .Where(x => x.NodeType == XmlNodeType.Text)
                            .Where(x => x.Parent.Nodes().Count() > 1);

edit 只是一个额外的评论,我看到很多人声称这个 XML 无效。我不同意这一点。虽然它不漂亮,但根据我的知识(和验证器)它仍然有效

关于c# - 如何从 XDocument 获取文本值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7831855/

相关文章:

xml - 如何使用 Linq to Xml 克隆 xml 元素

c# - 在 C# 中处理只读字段的 XML 序列化

c# - 启动过程问题

java - 解析 XML 字符串并构建字符串列表

c# - 在 C# 中使用进度条

xml - 使用 for-each-group 进行 XSLT 嵌套分组

c# - 将 C# 类序列化为 XML 文本的更简单方法

c# - 使用 XmlSerializer 序列化为 XML 字符串时对序列化值进行舍入

c# - 将对数据网格所做的更改反射(reflect)回数据集和数据表

c# - Sharepoint.Utility 替换