我需要创建一个XML xPath解析器。所有解析都必须在客户端上处理(使用JavaScript)。我创建了一段JavaScript代码来实现这一点,当默认命名空间起作用时,所有看起来都很正常。但是,我无法查询具有默认命名空间的XML。
我在fiddle上创建了一个示例代码。xmlString是从服务器接收到的XML字符串。xPathString是对接收到的XML进行的查询。
以下是一些情况:
1. http://jsfiddle.net/BF34q/1/ - 没有名称空间 - 一切正常
2. http://jsfiddle.net/BF34q/2/ - 添加ns名称空间。元素具有ns:前缀。 xPath使用此前缀 - 正常
3. http://jsfiddle.net/BF34q/3/ - 使用默认名称空间 - 不确定如何配置xPathString。
请注意,其他人将使用此解析器,因此我真的希望避免像以下解决方案:
我在fiddle上创建了一个示例代码。xmlString是从服务器接收到的XML字符串。xPathString是对接收到的XML进行的查询。
以下是一些情况:
1. http://jsfiddle.net/BF34q/1/ - 没有名称空间 - 一切正常
2. http://jsfiddle.net/BF34q/2/ - 添加ns名称空间。元素具有ns:前缀。 xPath使用此前缀 - 正常
3. http://jsfiddle.net/BF34q/3/ - 使用默认名称空间 - 不确定如何配置xPathString。
请注意,其他人将使用此解析器,因此我真的希望避免像以下解决方案:
var xPathString = "//*[local-name()='book']";
并使它们能够使用简单的xPath表达式解析。我想知道在JavaScript中是否可以分配默认命名空间前缀?
注意:在IE中,提供的fiddle示例将无法工作。
xmlns="something"
来设置默认命名空间,因此没有前缀。默认情况下,默认命名空间是空命名空间(无命名空间)。默认命名空间取决于上下文;XPath在这里也不例外。通过在XPath表达式中不指定任何前缀并且不注册任何命名空间,OP的表达式很可能匹配没有命名空间的节点。 - Lumihttp://example.com/domain
。只需将其映射到某个前缀x
,然后在查询中使用该前缀即可。它可以在使用LibXML2等库时工作。不过 embedded in the browser 的处理器的咒语不确定应该是什么。也许可以尝试使用Saxon库。 - Lumi