我有一个类似于
的XML对象(y)<media>
以下是我尝试使用<media>
中的“xmlns”属性,但我无法得到它。
即使我执行以下操作,我似乎也无法在var z = y.evaluate("//@*",y,null,XPathResult.ANY_TYPE,null);
z.iterateNext()
中获得该属性。
xmlns="urn:xmpp:message:multimedia"
我希望能够通过z.iterateNext()得到这样的东西:
pattern
提前致谢!
答案 0 :(得分:0)
XPath数据模型不将名称空间声明视为属性,因此使用XPath @*
将找不到xmlns="http://example.com/foo"
或xmlns:pf="http://example.com/bar"
之类的任何名称空间声明。在范围内有命名空间节点(https://www.w3.org/TR/xpath/#namespace-nodes),但您可以使用命名空间轴(https://www.w3.org/TR/xpath/#axes)进行选择(如果支持,我认为使用Gecko引擎的Mozilla浏览器不支持它,以及下面的代码段)在Chrome或Edge中找不到使用命名空间轴的任何内容。)
var xmlDoc = new DOMParser().parseFromString(`<message xmlns="jabber:client" type="groupchat">
<body>https://[something].com/*.txt</body>
<media xmlns="urn:xmpp:message:multimedia">
<source src="https://[something].com/*.txt" type="text/plain" />
</media>
<html xmlns="http://jabber.org/protocol/xhtml-im">
<body xmlns="http://www.w3.org/1999/xhtml">
<a href="https://[something].com/*.txt">View Paste</a>
</body>
</html>
<x xmlns="jabber:x:event">
<composing />
</x>
<delay xmlns="urn:xmpp:delay" />
<x xmlns="jabber:x:delay" />
</message>`, 'application/xml');
var media = xmlDoc.getElementsByTagNameNS('*', 'media')[0];
console.log('media.namespaceURI: ' + media.namespaceURI);
var xpathResult = xmlDoc.evaluate('namespace::*', media, null, XPathResult.ANY_TYPE, null);
var ns = null;
while ((ns = xpathResult.iterateNext()) != null) {
console.log('Found in-scope namespace "' + ns.namespaceURI + '" with prefix "' + ns.prefix + '"');
}
&#13;