2016-02-18 46 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」之外的東西。這可能是問題嗎?它看起來像「節」不是一個字符串。