我需要创建一个XML xPath解析器。所有解析都必须在客户端进行(使用javascript)。我创建了一个执行此操作的javascript,在默认命名空间发挥作用之前,所有内容都可以正常运行。我根本无法查询具有默认命名空间的XML。
我在小提琴上创建了一个示例代码。在xmlString中是从服务器接收的XML字符串。在xPathString中,对收到的XML进行查询。
以下是一些情景:
请注意,其他人会使用此解析器,所以我真的想避免像
这样的解决方案var xPathString = "//*[local-name()='book']";
并使他们能够使用简单的xPath表达式解析它。我想知道是否可以在javascript中分配默认名称空间前缀?
注意:小提琴上提供的示例在IE中不起作用。
答案 0 :(得分:8)
我认为有三种方法可以做到这一点:
//*[local-name()='book']
语法访问节点这可以这样实现:
function nsResolver(prefix) {
switch (prefix) {
case 'xhtml':
return 'http://www.w3.org/1999/xhtml';
case 'mathml':
return 'http://www.w3.org/1998/Math/MathML';
default:
return 'http://example.com/domain';
}
}
xml.evaluate('//myPrefix:book', xml, nsResolver, XPathResult.ANY_TYPE, null);
答案 1 :(得分:0)
我的印象是你对XPath处理的理解与实现不匹配 - 除非你正在处理的实现与我熟悉的实现有很大不同。
通常,XPath处理器必须注册名称空间并将前缀映射到它们,以便成功评估表达式。所以前缀可以是任何东西 - 唯一重要的是它们被映射到的东西。请参阅this answer by a known expert以获取更多信息。