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

How to check existance of the XML element value in Javascript

本文关键字:元素 是否 存在 XML 检查 Javascript      更新时间:2023-09-26

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

变量"广告":

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

和变量'add ':

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

}

我需要If Id不是空白从'ad'变量,然后返回警报作为errorId如下:

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

而且,我需要If Id不是空白从'add '变量然后返回警报作为errorId如下:

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

这可能有点过头了,但我喜欢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);
}

现在,您可以通过文档进行查询,获取您感兴趣的值并实现您的逻辑。在这个例子中,我在DOM中显示所有的HTML片段。如果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转换的资源:

  • http://www.w3schools.com/xsl/xsl_client.asp
  • https://developer.mozilla.org/en-US/docs/Web/XSLT/Using_the_Mozilla_JavaScript_interface_to_XSL_Transformations
  • https://developer.mozilla.org/en-US/docs/Web/API/XSLTProcessor
  • 创建XML
  • XML解析错误-文档末尾的额外内容