【问题标题】:How to filter an XML variable with Javascript如何使用 Javascript 过滤 XML 变量
【发布时间】:2020-06-29 21:03:41
【问题描述】:

基于以下对象:

var xmlData = 
`<?xml version="1.0" encoding="UTF-8"?>
<log>
  <entry id="1">
    <message>Application started</message>
  </entry>
  <entry id="2">
    <message>Application ended</message>
  </entry>
  <entry id="3">
    <message>Application ended</message>
  </entry>
</log>`

我需要检索那些重复的节点的 ID。例如,如果您检查一下,您会发现有两个名为“消息”的节点具有相同的文本:“应用程序结束”。

所以我需要返回这两个 id (2 & 3)。

到目前为止我一直在这样做:

function getId(xml, message) {
  parser = new DOMParser();
  xml = parser.parseFromString(xmlData,"text/xml");
  
  for (var i = 0; i < xml.getElementsByTagName("entry").length; i++){
    
  }
}

如您所见,我创建了一个函数,我解析了 xml 并变成了一个 DOM 文档,现在我只需要过滤它以返回这两个条目。到目前为止,我已经达到了可以检查这些节点内部的部分,但现在我想不出过滤它们的好方法。

有什么想法吗?

提前致谢。

【问题讨论】:

    标签: javascript xml function filter


    【解决方案1】:

    假设你的 XML 保持相同的结构,我们可以这样写:

    function getId(xml, message) {
          var parser = new DOMParser();
          xml = parser.parseFromString(xmlData,"text/xml");
          var ids = [];
          
          for (var i = 0; i < xml.getElementsByTagName("entry").length; i++){
    
              var msg = xml.getElementsByTagName("entry")[i].childNodes[0].nextSibling.innerHTML;
        
              if(msg == message) 
                ids.push(xml.getElementsByTagName("entry")[i].id);
          }
          
          return ids;
        }
        
    
        var ids = getId(xmlData,"Application ended");
        console.log(ids) // returns ["2", "3"]
        
    

    var msg = xml.getElementsByTagName("entry")[i].childNodes[0].nextSibling.innerHTML; 行正在查找 nextSibling(XML 中的标记),但如果您的结构发生变化,您必须获取所有节点并检查名为“消息”的节点。

    【讨论】:

    • 它按预期工作!真的非常感谢。
    猜你喜欢
    • 2021-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-10
    • 1970-01-01
    • 2020-12-11
    • 2013-10-18
    相关资源
    最近更新 更多