如何使用XPath在具有命名空间的XML文档中查找所有文本节点?
假设我有这样的XML:如何使用XPath在具有命名空间的XML文档中查找所有文本节点?
<?xml version="1.0" encoding="UTF-8"?>
<root xmlns:foo="http://www.foo.com">
<foo:one>Alpha</foo:one>
<two foo:Dog="Yorkie">Bravo</two>
<three>foo:Delta</three>
</root>
如果我想使用XPath来查找那些在“http://www.foo.com”命名空间的所有元素(如元素“1”) ,我可以用这个:
//*[namespace-uri()='http://www.foo.com']
如果我想找到具有该命名空间属性的所有元素(如元素“二”),我可以用这个:
//@*[namespace-uri()='http://www.foo.com']
如果我想去nd在该名称空间中具有文本节点的所有元素(如元素“3”),我可以使用哪种XPath?
允许XPath 1或2。谢谢。
在文本节点上没有这样的名称空间;您的three
节点只包含文本foo:Delta
,它在XML中没有特殊含义。您可以使用starts-with
找到控股开始foo:
文本节点:
//*[starts-with(., "foo:")]
@mindandmedia:是的,它呢? – 2012-02-21 18:01:27
@mindandmedia,我想我在我原来的帖子中回答了你的问题。看一看。 – 2012-02-21 18:02:21
如果我想找到具有文本节点在该命名空间的所有元素 (如元素“三化”),是什么,XPath可我用?
只有有名字的节点可以在一个命名空间。
因此:文本节点,注释和文档节点没有(属于)名称空间。
PI的名称也不属于任何名称空间。
因此,有没有像“在命名空间文本节点” ......
在这种特殊情况下,你可以使用这个XPath表达式选择需要的元素:
//*[text()[starts-with(., 'foo:')]]
这选择XML文档中至少包含一个以字符串"foo:"
开头的字符串值的子节点子元素。
很好的解释,谢谢 – 2012-02-21 19:52:31
@ james.garriss:我很高兴我的回答对你有用,请考虑接受和/或提升它。 – 2012-02-21 19:58:05
命名空间适用于节点(可能还有属性)。在文本节点的文本中,没有名称空间的概念。这都只是文字。 – 2012-02-21 17:51:37