gpt4 book ai didi

javascript - 在 javascript 中使用 xPath 解析具有默认命名空间的 XML

转载 作者:数据小太阳 更新时间:2023-10-29 02:19:46 26 4
gpt4 key购买 nike

我需要创建一个 XML xPath 解析器。所有解析都必须在客户端进行(使用 javascript)。我创建了一个执行此操作的 javascript,在默认 namespace 发挥作用之前,一切看起来都很好。我根本无法查询具有默认命名空间的 XML。

我在 fiddle 上创建了一个示例代码。在 xmlString 中是从服务器接收到的 XML 字符串。在 xPathString 中是对接收到的 XML 完成的查询。

以下是一些场景:

  1. http://jsfiddle.net/BF34q/1/ - 没有 namespace - 一切正常
  2. http://jsfiddle.net/BF34q/2/ - 添加了 ns 命名空间。元素有 ns: 前缀。 xPath 使用此前缀 - OK
  3. http://jsfiddle.net/BF34q/3/ - 使用默认命名空间 - 不确定如何配置 xPathString。

注意其他人会使用这个解析器,所以我真的很想避免像这样的解决方案

var xPathString = "//*[local-name()='book']";

并使他们能够使用简单的 xPath 表达式对其进行解析。我想知道是否可以在 javascript 中分配默认 namespace 前缀?

注意:fiddle 上提供的示例在 IE 中不起作用。

最佳答案

我认为可以通过三种方式做到这一点:

  1. 使用//*[local-name()='book']语法访问节点
  2. Convert XML to string ,使用 RegExp 删除默认 namespace ,convert it back to XML
  3. 对于预先知道 namespace 的 XML 文件,您可以创建自己的 own namespace resolver ,这将允许您为默认命名空间使用自己的前缀。

可以这样实现:

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);

关于javascript - 在 javascript 中使用 xPath 解析具有默认命名空间的 XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6761517/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com