2016-02-18 45 views
0

xml如何让XML命名空间在JavaScript

<message to="to_test" from="from_test"> 
    <test xmlns="google:mobile:data"> 
     {"message":"test_message"} 
    </test> 
</message> 

我使用功能getChildText("pcm")获得的价值{"message":"test_message"}。但我试图检索命名空间xmlns值。

我试过以下How to get XML namespace?,How to get specific XML namespace in XQuery in SQL Server没有运气,它表明我is not function error我做错了什么?

我忘了提及,我目前正在与node.js一起工作。

更新

上面的XML输出为xmpp stanza

在这里我得到attrs使用以下。

stanza.attrs.to给我to_test

stanza.attrs.from给我from_test

stanza.getChildText("test")给我{"message":"test_message"}

我尝试使用

var parser = new DOMParser(); 
    var documents = parser.parseFromString(stanza, 'text/xml'); 
    var response = documents.responseXML.getElementsByTagName("test"); 
    var sunrise = response[0].getElementsByTagNameNS("[Namespace URI]", "test")[0].getAttribute("xmlns"); 
    console.log(sunrise); 

在这里我得到了

[xmldom error] element parse error: TypeError: source.indexOf is not a function @#[line:0,col:undefined] 
+0

我能够使用getAttribute获取名称空间:'document.querySelector('test')。getAttribute('xmlns')'shows“google:mobile:data” – lxe

+0

您使用的是什么XML模块?你如何阅读文件?向我们展示不工作的代码。 – Quentin

+0

我正在使用'xmpp'。输出来自'stanza',我需要解析它 – m2j

回答

2

使用标准的浏览器的DOM解析器,您可以执行以下操作来获得xmlns

var txt = "<message><test xmlns=\"google:mobile:data\"> {\"message\":\"test_message\"}</test></message>"; 

parser = new DOMParser(); 
xmlDoc = parser.parseFromString(txt,"text/xml"); 
ns = xmlDoc.getElementsByTagName("test")[0].namespaceURI 

我已经测试过Chrome和IE,它的工作原理。

+0

我得到了'[xmldom错误] \t元素解析错误:TypeError:source.indexOf不是一个函数@#[line:0,col:undefined]' – m2j

1

我遇到了类似的错误 - 在我的情况下,这是因为我已经传递了一个字符串“parseFromString”之外的东西。这可能是问题吗?它看起来像“节”不是一个字符串。