如何从XDocument获取文本值?

时间:2011-10-20 06:17:48

标签: c# xml xml-serialization

我有一个XDocument。例如,

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

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

3 个答案:

答案 0 :(得分:9)

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

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

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

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

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

答案 1 :(得分:3)

您可以使用Nodes属性迭代文档根元素的子节点。从那时起,文本节点将由XText个实例表示,其文本值可通过其Value属性获得:

string textValue = yourDoc.Root.Nodes.OfType<XText>().First().Value;

答案 2 :(得分:0)

假设变量“doc”包含代表上述XML的XDocument,

doc.XPathSelectElement("cars/name").Nodes().OfType<XText>() 

这应该为您提供包含您正在查找的纯文本的所有XText类型文本节点。