2016-10-04 60 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转换的一些资源: