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复杂到一个节点的简单路径.
这应该删除您找到的任何名称空间声明:
var xml = http.responseXML.replace(/<([a-zA-Z0-9 ]+)(?:xml)ns=\".*\"(.*)>/g, "<$1$2>");
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
8467 次 |
最近记录: |