我有一个XDocument.For例如,如何从XDocument获取文本值?
<cars>
<name>
<ford>model1</ford>
textvalue
<renault>model2</renault>
</name>
</cars>
如何获得来自的XDocument文本值?如何识别元素中的文本值?
我有一个XDocument.For例如,如何从XDocument获取文本值?
<cars>
<name>
<ford>model1</ford>
textvalue
<renault>model2</renault>
</name>
</cars>
如何获得来自的XDocument文本值?如何识别元素中的文本值?
文本值由XLINQ解释为XTEXT。因此,你可以很容易地检查一个节点类型XTEXT或通过检查节点类型看:
// get all text nodes
var textNodes = document.DescendantNodes()
.Where(x => x.NodeType == XmlNodeType.Text);
然而,这让我感到你只希望找到一段文字似乎有点寂寞命名textvalue。没有真正的方法来认识这种有效但不寻常的事情。您可以检查是否父被命名为“名”,或者如果textNode本身是单独还是不见:
// get 'lost' textnodes
var lastTextNodes = document.DescendantNodes()
.Where(x => x.NodeType == XmlNodeType.Text)
.Where(x => x.Parent.Nodes().Count() > 1);
编辑只是一个额外的评论,我看到许多人认为这个XML是无效的。我不同意这一点。虽然它不漂亮,这是据我所知(和验证)
假设变量“文档”中包含的XDocument代表高于你的XML仍然有效,
doc.XPathSelectElement("cars/name").Nodes().OfType<XText>()
这应该给你所有的XTEXT类型包含您正在查找的纯文本的文本节点。
@Hanan Khan - 当然可以。它被称为混合内容模型。上述XML格式良好。 –
@DevNull我站好了。它是有效的XML。 http://www.w3schools.com/schema/schema_complex_mixed.asp –