假设我有这个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”命名空间中的所有元素(例如元素“one”),我可以使用:
//*[namespace-uri()='http://www.foo.com']
如果我想查找在该命名空间中具有属性的所有元素(例如元素“two”),我可以使用它:
//@*[namespace-uri()='http://www.foo.com']
如果我想查找在该命名空间中有文本节点的所有元素(例如元素“three”),我可以使用什么XPath?
允许XPath 1或2。感谢。
答案 0 :(得分:1)
文本节点上没有命名空间;您的three
节点只包含文本foo:Delta
,它在XML中没有特殊含义。您可以使用foo:
找到以starts-with
开头的文字节点:
//*[starts-with(., "foo:")]
答案 1 :(得分:1)
如果我想查找该命名空间中有文本节点的所有元素 (例如元素“three”),我可以使用什么XPath?
只有名称的节点可以在命名空间中。
因此:文本节点,注释和文档节点没有(属于)命名空间。
PI的名称也不属于任何名称空间。
因此,没有什么比“该命名空间中的文本节点”......
在这种特殊情况下,您可以使用此XPath表达式选择所需元素:
//*[text()[starts-with(., 'foo:')]]
这将选择XML文档中具有至少一个text-node子元素的任何元素,该子元素的字符串值以字符串"foo:"
开头。