2016-10-04 63 views
1

我將XML存儲在變量'ad'和'addd'中。如何在Javascript中檢查XML元素值的存在

變量 '廣告':

<?xml version="1.0" encoding="UTF-8"?> 
<name> 
<data> 
<Id>003</Id> 
</data> 
<data> 
<Id>006</Id> 
</data> 
.... 
</name> 

和可變 'ADDD':

<?xml version="1.0" encoding="UTF-8"?> 
<name> 
<data> 
<Id>009</Id> 
</data> 
<data> 
<Id>005</Id> 
</data> 
... 
</name> 

我已經寫了ttt功能:

function ttt(ad,addd) { 
var match = ad.match(/<Id\/>/); 
var matcht = addd.match(/<Id\/>/); 
if ((! match || match.length == 0) && (! matcht || matcht.length == 0)){ 
    return "Below is the details of the Id of ad:\n\n" + ad.split("<Id>")[1].split("</Id>")[0]; + "\n\n And, Below is the details of the Id of addd:\n\n" +addd.split("<Id>")[1].split("</Id>")[0]; 
} 

}

我需要IfId是不是從「廣告」變量空白,則作爲error返回警報,Id如下:

<?xml version="1.0" encoding="UTF-8"?> 
<name> 
<data> 
<Id>003</Id> 
</data> 
<data> 
<Id>006</Id> 
</data> 
</name> 

而且,我需要IfId不是空白的「ADDD」,那麼變量error返回警報,Id如下:

<?xml version="1.0" encoding="UTF-8"?> 
<name> 
<data> 
<Id>009</Id> 
</data> 
<data> 
<Id>005</Id> 
</data> 
</name> 
+2

不要使用正則表達式解析XML。使用DOM解析器。 – Bergi

+0

@Bergi我只有這樣做。但這不是按照預期產出提供的 – NL1

回答

1

這可能是一個矯枉過正的問題,但我喜歡XSL的方法,它的工作原理。我發現它也適用於教育目的。

您可以創建一個XSL樣式表,並獲取所有你感興趣的值,因此,該XSL是這樣的:

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:template match="/name"> 
    <html> 
    <body> 
     <xsl:for-each select="data"> 
     <div><xsl:value-of select="Id" /></div> 
     </xsl:for-each> 
    </body> 
    </html> 
    </xsl:template> 
</xsl:stylesheet> 

隨着XPATH我達到了name節點。然後,我遍歷所有的data節點並選擇子女的Id。值被添加到一個div。您可以稍後查看並獲取值。

需要注意的三件事: 您將XML存儲爲字符串變量,因此您需要將其設置爲NodeDomParser是你的朋友。

var parser = new DOMParser(); 
    var adXmlDoc = parser.parseFromString(ad, "text/xml"); 
    var adddXmlDoc = parser.parseFromString(addd, "text/xml"); 

此外,您還需要加載XSL文件中,我只是取它通過XMLHttpRequest的例子。

var xsl = loadXMLDoc(file); 
    var xsltProcessor = new XSLTProcessor(); 
    xsltProcessor.importStylesheet(xsl); 

我說還有一個函數來檢索XSLT轉換的轉換後的文檔:

function getDocument(xsltProcessor, xmlDoc, name) { 
    var ownerDocument = document.implementation.createDocument("", name, null); 
    return xsltProcessor.transformToDocument(xmlDoc, ownerDocument); 
} 

現在,你可以通過文件查詢,讓你感興趣的值,並實現你的邏輯。在這個例子中,我將所有的HTML片段分散到DOM中進行顯示。如果節點沒有任何值(因此Id沒有返回),則會顯示錯誤。

function appendToDocument(selector, doc) { 
    var container = document.querySelector(selector); 
    var elements = doc.querySelectorAll("div"); 
    for (var i = 0; i < elements.length; i++) { 
    if(!elements[i].innerHTML) { 
     displayError(container); 
    } 
    container.innerHTML += elements[i].innerHTML + "</br>"; 
    } 
} 

隨意擺弄和實施你的邏輯基礎上的例子。 希望這可以幫助你。

可公開訪問的plunk

另外,XML和XSLT轉換的一些資源: