在Chrome上XPath选择属性失败

XPath selecting attribute fails on Chrome

本文关键字:属性 失败 选择 XPath Chrome      更新时间:2023-09-26

下面是我用expect.js运行的一个小测试:

describe('xpath', function () {
    it('finds attribute nodes', function () {
        $(document.body).append('<string fooBar="bar"><data id="xyz"></data></string>');
        var xyz = document.getElementById('xyz');
        expect(xyz).not.to.be(null);
        var nodes = document.evaluate('../@fooBar', xyz, null, XPathResult.ANY_TYPE, null);
        var element = nodes.iterateNext();
        expect(element.nodeValue).to.equal('bar');
    });
});

我用Testacular在Chrome和Firefox上测试它,当它通过Firefox时,它在Chrome上失败,错误说elementnull。对我来说真正疯狂的部分是,如果我将fooBar更改为foo,它将传递两个系统。Chrome也打破了,如果我使用Foo而不是foo。换句话说,当搜索属性中包含大写字母时,Chrome上的XPath查询似乎会中断。这是正常行为吗?我错过什么了吗?或者这是Chrome浏览器的一个bug ?

更新1

我添加了Google的Wicked Good XPath,现在ie也可以工作了,但是Chrome仍然失败。

更新2

如果实际属性有大写,则XPath查询在Chrome上工作,但XPath值都是小写的

是否使用XHTML?如果是这样,XHTML规范规定所有元素和属性名称必须是小写的。

您可能会发现Chrome仅在此基础上对xpath进行评估,而其他浏览器则更符合XML(在任何情况下都有效)。