gpt4 book ai didi

javascript - 如何使用 Javascript 删除 XML 命名空间?

转载 作者:数据小太阳 更新时间:2023-10-29 01:50:04 27 4
gpt4 key购买 nike

我发现,就我的目的而言,XML namespace 只会引起很多麻烦,而且完全没有必要。 (例如,它们如何使 xpath 复杂化。)

是否有一种简单的方法可以从 XML 文档中完全删除 namespace ?

(有一个相关的问题,但它涉及删除标签上的 namespace 前缀,而不是文档根目录中的 namespace 声明:“Easy way to drop XML namespaces with javascript ”。)

编辑:下面的示例和更多详细信息:

XML:

<?xml version="1.0" ?>
<main xmlns="example.com">
<primary>
<enabled>true</enabled>
</primary>
<secondary>
<enabled>false</enabled>
</secondary>
</main>

JavaScript:

function useHttpResponse()
{
if (http.readyState == 4)
{
if(http.status == 200)
{
var xml = http.responseXML;
var evalue = getXMLValueByPath('/main/secondary/enabled', xml);
alert(evalue);
}
}
}

function getXMLValueByPath(nodepath, xml)
{
var result = xml.evaluate(nodepath, xml, null, XPathResult.STRING_TYPE, null).stringValue;
return result;
}

示例 XML 与我正在使用的实际 XML 一样,只是短得多。请注意,命名空间的标签上没有 前缀。我假设这是 null 或默认命名空间。

JavaScript 是我的 ajax 函数的一个片段。如果我从 main 标记中删除 xmlns="example.com" 部分,我就能成功获取该值。只要存在任何命名空间,该值就变为未定义。

编辑 2:

可能值得一提的是,XML 标记中实际上没有使用任何已声明的 namespace (如上面的示例)。在我使用的实际 XML 文件中,声明了三个命名空间,但没有标记以命名空间引用为前缀。因此,也许问题应该重新命名为“如何使用 Javascript 删除未使用的 XML 命名空间?”如果命名空间 1) 从未使用过并且 2) 使用 xpath 使到节点的其他简单路径复杂化,我看不出保留命名空间的原因。

最佳答案

这应该删除您找到的任何命名空间声明:

var xml = http.responseXML.replace(/<([a-zA-Z0-9 ]+)(?:xml)ns=\".*\"(.*)>/g, "<$1$2>");

关于javascript - 如何使用 Javascript 删除 XML 命名空间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4505103/

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