我有一个简单的xml节点和一个同样简单的xpath查询表达式,但它不能正常工作。我尝试了它的各种变体(// node -name,*name()='node-name',current-node-name/node-name),但仍然找不到正确的节点!
下面是我的xml:
<page-reference xmlns="http://something.com">
<relative-path>something/something</relative-path>
<base-path>somePath</base-path>
</page-reference>我已经尝试了几种不同的x路径变体。如果我去掉页面引用标记的xmlns属性,它们中的大多数都可以工作。例如://relative-path, /page-reference/relative-path, relative-path, page-reference/relative-path,但它们都不能使用xmlns属性。
你知道是什么原因造成的吗?我认为这是值中http后面的双斜杠,但我不知道为什么这会导致问题,而且看起来也不是这样。
发布于 2012-12-03 23:28:56
,或者您也可以使用
//*[name()='relative-path']发布于 2012-12-03 23:23:59
xmlns属性为元素提供了一个名称空间,这意味着它不仅仅是一个普通的“页面引用”或“相对路径”元素,因此不能这样访问。不同的语言有不同的方式来指示名称空间,从指示XPath查询的默认值到使用前缀。
对于JavaScript,您可以使用名称空间解析器:https://developer.mozilla.org/en-US/docs/Introduction_to_using_XPath_in_JavaScript#Implementing_a_User_Defined_Namespace_Resolver (如果您想指定前缀--在文档中使用不同的名称空间时很有用)和/或依赖于XPath表达式中的默认名称空间(尽管您需要使用一些--任何--前缀):https://developer.mozilla.org/en-US/docs/Introduction_to_using_XPath_in_JavaScript#Implementing_a_default_namespace_for_XML_documents
var xml = new DOMParser().parseFromString('<page-reference xmlns="http://something.com">'+
'<relative-path>something/something</relative-path>'+
'<base-path>somePath</base-path>'+
'</page-reference>', 'text/xml');
function resolver() {
return 'http://something.com';
}
var refs = xml.evaluate('//x:page-reference', xml, resolver, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
alert(refs.snapshotItem(0).nodeName) // 'page-reference'你需要一个填充程序才能支持IE。(快速搜索一下,找到了http://sourceforge.net/projects/js-xpath/files/js-xpath/ )
https://stackoverflow.com/questions/13686174
复制相似问题