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

JYe*_*ton 6 javascript xml xml-namespaces

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

有没有一种简单的方法可以从XML文档中完全删除命名空间?

(有一个相关的问题,但它与标签消除命名空间前缀,而不是从文档根目录命名空间声明涉及:" 放弃与JavaScript的XML命名空间的简单方法 ".)

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

XML:

<?xml version="1.0" ?>
<main xmlns="example.com">
  <primary>
    <enabled>true</enabled>
  </primary>
  <secondary>
    <enabled>false</enabled>
  </secondary>
</main>
Run Code Online (Sandbox Code Playgroud)

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;
}
Run Code Online (Sandbox Code Playgroud)

示例XML就像我正在使用的实际XML一样,虽然要短得多.请注意,命名空间的标记上没有前缀.我假设这是null或默认命名空间.

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

编辑2:

值得一提的是,XML标记中实际上没有使用任何声明的命名空间(如上面的示例).在我正在使用的实际XML文件中,声明了三个名称空间,但没有标记以名称空间引用为前缀.因此,也许这个问题应该重新命名为"如何使用Javascript删除未使用的XML命名空间?" 我没有看到保留命名空间的原因,如果它是1)从未使用过,2)使用xpath复杂到一个节点的简单路径.

And*_*dre 6

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

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