【问题标题】:How to check existance of the XML element value in Javascript如何在 Javascript 中检查 XML 元素值是否存在
【发布时间】:2016-10-04 18:18:41
【问题描述】:

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

变量“广告”:

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

}

我需要 If Id 不是来自“广告”变量的空白,然后返回警报为 errorId,如下所示:

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

而且,我需要 If Id 不是来自“addd”变量的空白,然后返回警报为 errorId,如下所示:

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

【问题讨论】:

  • 不要使用正则表达式解析 XML。使用 DOM 解析器。
  • @Bergi 我只这样做了。但这并没有提供预期的输出

标签: javascript xml


【解决方案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);
}

现在,您可以通过文档进行查询,获取您感兴趣的值并实现您的逻辑。在示例中,我将 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 转换的资源:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-07
    • 1970-01-01
    相关资源
    最近更新 更多