我发现,对于我的需求来说,XML命名空间只会带来很多麻烦,并且完全没有必要。(例如,它们如何使xpath变得复杂。)
有没有一种简单的方法可以从XML文档中完全删除命名空间?
(有一个相关的问题,但它涉及删除标记上的命名空间前缀,而不是从文档根中删除命名空间声明:“使用javascript轻松删除XML命名空间的方法”。)
编辑:下面是示例和更多详细信息:
XML:
示例XML与我实际使用的XML非常相似,尽管长度要短得多。请注意,标签上没有命名空间前缀。我认为这是空或默认命名空间。
JavaScript是我的ajax函数中的片段。如果我从
编辑2:
可能值得一提的是,在XML标记中没有使用任何已声明的命名空间(如上面的示例)。在我正在处理的实际XML文件中,声明了三个命名空间,但没有任何标记带有命名空间引用。因此,也许问题应该重新命名为“如何使用JavaScript删除未使用的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>
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非常相似,尽管长度要短得多。请注意,标签上没有命名空间前缀。我认为这是空或默认命名空间。
JavaScript是我的ajax函数中的片段。如果我从
main
标记中删除xmlns="example.com"
部分,则可以成功获取值。只要存在任何命名空间,该值就变为未定义。编辑2:
可能值得一提的是,在XML标记中没有使用任何已声明的命名空间(如上面的示例)。在我正在处理的实际XML文件中,声明了三个命名空间,但没有任何标记带有命名空间引用。因此,也许问题应该重新命名为“如何使用JavaScript删除未使用的XML命名空间?”如果它既未被使用又使使用xpath查找节点变得复杂,那么我不认为保留命名空间有任何意义。