如何从XDocument获取文本值?

Mar*_*hal 4 c# xml xml-serialization

我有一个XDocument.例如,

<cars>
<name>
<ford>model1</ford>
   textvalue   
<renault>model2</renault>
</name>
</cars>
Run Code Online (Sandbox Code Playgroud)

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

Pol*_*ity 9

XLinq将文本值解释为XText.因此,您可以轻松检查节点是否为XText类型,或者通过检查NodeType,请参阅:

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

然而,令我感到震惊的是你只想找到一段似乎有点孤独的文本值.没有真正的方法来识别这种有效但不寻常的东西.您可以检查父项是否命名为"name",或者textNode本身是否单独或不显示:

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

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