Javascript 看似不一致的Chrome-XPath结果
我有一个非常简单的XML文档,是从一个较大的父级检索到的。请参阅下面的“accountxml”:Javascript 看似不一致的Chrome-XPath结果,javascript,google-chrome,namespaces,webkit,xpath,Javascript,Google Chrome,Namespaces,Webkit,Xpath,我有一个非常简单的XML文档,是从一个较大的父级检索到的。请参阅下面的“accountxml”: <accounts xmlns="https://domain.com/path"> <customerid>sometext</customerid> <login>sometext</login> <companyname>sometext</companyname>
<accounts xmlns="https://domain.com/path">
<customerid>sometext</customerid>
<login>sometext</login>
<companyname>sometext</companyname>
<canmanageclients>sometext</canmanageclients>
</accounts>
返回OK:
<login>sometext</login>
返回:
null
这是一个如此简单的查询,我很惊讶它竟然中断了。但我可以100%的复制它。我是做错了什么,还是这是Chrome中的一个bug?感谢Gael鼓励我重新审视大写字母 关键是文档取自较大的父级。尽管上面的小文档是按照JS控制台所看到的方式打印的,所有元素名称都是小写的,但它所取的较大的父文档使用initialLowerCase作为元素名称 即使我在查询较小的片段,我仍然需要使用父片段的大小写,而不是子片段的大小写。
accountxml.evaluate('//ns2:customerId',accountxml,myNS,XPathResult.FIRST_ORDERED_NODE_TYPE,null).singleNodeValue;
我不确定这是一个Chrome bug还是一个预期行为 你100%确定这不是一个与案件相关的问题吗?就像
customerid
是customerid
?盖尔:你说得对。上面的小文档完全按照JS控制台看到的方式打印。但是它所取的较大的父元素使用initialLowerCase作为元素名。即使我在查询较小的片段,我仍然需要使用父片段的大小写,而不是子片段的大小写。想在下面给出一个答案吗?我不是在寻求声誉,我真的很高兴我能解决你的问题,因为我对xpath一无所知,并且胡乱猜测我的答案:D@Gael:很公平。我已经花费在下面的原因和解决方案上。再次感谢。这取决于您定义accountxml
的方式:如果您使用XML解析器构建它,那么它就是一个bug,因为它应该保留QName,因为它是XPath引擎所期望的。如果不是这样做的话,这是一个糟糕的设计选择。@Alejandro:最初的完整树XMLDocument是用domParser构建的。然后运行XPath查询。第一个XPathResult被序列化为一个字符串,然后从该字符串进行解析,以创建一个新的XMLDocument,其中只包含有问题的分支。
null
accountxml.evaluate('//ns2:customerId',accountxml,myNS,XPathResult.FIRST_ORDERED_NODE_TYPE,null).singleNodeValue;