从 JS 中的 XMLDocument 获取默认命名空间

Get default namespace from XMLDocument in JS

我用 XMLHttpRequest 加载了 XMLDocument。

<root xmlns="http://somesite.org/ns">
</root>

http://somesite.org/ns 是默认命名空间。我可以使用函数 Node.isDefaultNamespace 来检查某个命名空间是否是默认的 (true/false),并且它运行良好。

但是如何从 XMLDocument 中获取默认名称空间?

有没有像DOMString Node.getDefaultNamespace()这样的想法?

使用lookupNamespaceURI(null):

var parser = new DOMParser();
[
  '<root xmlns="http://example.com/ns1"/>',
  '<root/>',
  '<ns:root xmlns:ns="example.com/ns2"/>'
].forEach(function(item) {
  var doc = parser.parseFromString(item, "application/xml");
  console.log('result of doc.lookupNamespaceURI(null): |' + doc.lookupNamespaceURI(null) + '|');
});

根据 https://www.w3.org/TR/dom/#dom-node-lookupnamespaceuri,使用 lookupNamespaceURI(''):

也应该有效

var parser = new DOMParser();
['<root xmlns="http://example.com/ns1"/>',
 '<root/>',
 '<ns:root xmlns:ns="example.com/ns2"/>'].forEach(function(item) {
  var doc = parser.parseFromString(item, "application/xml");
  console.log('result of doc.lookupNamespaceURI(\'\'): |' + doc.lookupNamespaceURI('') + '|');
});

请记住,XML 允许您覆盖任何元素上的默认命名空间,因此 doc.lookupNamespaceURI('') 的结果会检查 documentElement,并且可以有使用不同元素的子代或后代或者没有默认命名空间。