如何从XDocument中获取文本值?

4
我正在使用XDocument。例如:
<cars>
<name>
<ford>model1</ford>
   textvalue   
<renault>model2</renault>
</name>
</cars>

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


@Hasan Khan - 当然可以。这被称为混合内容模型。上述XML格式良好。 - Daniel Haley
@DevNull 我改口了。它是有效的 XML。http://www.w3schools.com/schema/schema_complex_mixed.asp - Muhammad Hasan Khan
3个回答

9

XLinq将文本值解释为XText。因此,您可以通过检查节点的类型或检查NodeType轻松确定节点是否为XText类型,具体如下:

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

编辑 只是一个额外的评论,我发现许多人声称这个XML文件无效。我不同意这一点。虽然它不够美观,但据我的知识(和验证器)所知,它仍然是有效的。


1
+1 表示不同意其他人说 XML 无效。 - Daniel Haley

3
你可以使用Nodes属性来迭代文档根元素的子节点。从那里开始,文本节点将由XText实例表示,它们的文本值可通过其Value属性获得:
string textValue = yourDoc.Root.Nodes.OfType<XText>().First().Value;

0
假设变量“doc”包含代表您上面XML的XDocument,
doc.XPathSelectElement("cars/name").Nodes().OfType<XText>() 

这应该能为你提供所有包含所需纯文本的 XText 类型文本节点。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接