如何在Javascript中检查XML元素值的存在

时间:2016-10-04 18:18:41

标签: javascript xml

我将XML存储在变量'ad'和'addd'中。

变量'ad':

<?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];
}

}

我需要{ad}变量中的If Id不为空,然后将error作为Id返回警告,如下所示:

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

而且,我需要If Id在“添加”变量中不为空,然后将error作为Id返回警告,如下所示:

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

1 个答案:

答案 0 :(得分: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中以供显示。如果node没有任何值(因此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转换的一些资源: