【问题标题】:Loop though xml and display values in alerts循环 xml 并在警报中显示值
【发布时间】:2014-01-08 13:25:55
【问题描述】:

我有一个设置为 Xml 的 字符串。这是我填充的数据集,然后以字符串 getXml() 的形式返回。

我想获取子类别下的所有值,并有一个警报显示显示每个子类别。

我尝试了类似的方法,但无法正确:

$.parseXML(xml).find('Table').each(function(index){
            var SubCategorySystem = $(this).find('SubCategorySystem').text();
            var SubCategory = $(this).find('SubCategory').text();
            alert(SubCategory);
        });

这就是我的字符串的样子。

<NewDataSet>
  <Table>
    <SubCategorySystem>Building</SubCategorySystem>
    <SubCategory>Building</SubCategory>
  </Table>
  <Table>
    <SubCategorySystem>Electrical</SubCategorySystem>
    <SubCategory>Electrical</SubCategory>
  </Table>
  <Table>
    <SubCategorySystem>Engineering</SubCategorySystem>
    <SubCategory>Engineering</SubCategory>
  </Table>
  <Table>
    <SubCategorySystem>Inspection</SubCategorySystem>
    <SubCategory>Inspection</SubCategory>
  </Table>
  <Table>
    <SubCategorySystem>Landscaping</SubCategorySystem>
    <SubCategory>Landscaping</SubCategory>
  </Table>
  <Table>
    <SubCategorySystem>Mechanical</SubCategorySystem>
    <SubCategory>Mechanical</SubCategory>
  </Table>
  <Table>
    <SubCategorySystem>Painting</SubCategorySystem>
    <SubCategory>Painting</SubCategory>
  </Table>
  <Table>
    <SubCategorySystem>Plumbing</SubCategorySystem>
    <SubCategory>Plumbing</SubCategory>
  </Table>
  <Table>
    <SubCategorySystem>Safety &amp; Security</SubCategorySystem>
    <SubCategory>Safety &amp; Security</SubCategory>
  </Table>
</NewDataSet>" 

【问题讨论】:

  • 究竟是什么不工作?

标签: javascript jquery xml alerts


【解决方案1】:

使用该函数加载xml

function loadXMLString(txt) {
        try {
            xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
            xmlDoc.async = "false";
            xmlDoc.loadXML(txt);
            return (xmlDoc);
        }
        catch (e) {
            try {
                parser = new DOMParser();
                xmlDoc = parser.parseFromString(txt, "text/xml");
                return (xmlDoc);
            }
            catch (e) {
                alert(e.message)
            }
        }
        return (null);
    }

然后像这样调用函数:

var xmlData = loadXMLString(originalxml);

现在你可以简单地这样做了:

var data =  xmlData.getElementsByTagName('SubCategory');
for(var i=0;i<data.length;i++)
{
    alert(data[i].textContent);
}

Check out this fiddle

【讨论】:

    【解决方案2】:

    我认为错误的部分是 $.parseXML(xml) 创建了一个 XML Document 但它没有将其作为对象返回,因此您将无法在其上使用 jQuery methods

    将它包装在一个对象中,它应该可以工作

    $($.parseXML(xml)).find('Table')
    

    【讨论】:

      【解决方案3】:

      你可以先引用这两个函数

      function getExtendedNodeValue(nodeName, xmlNode, i)
      {
          var node = "";
      
          if(typeof(xmlNode.getElementsByTagName(nodeName)[i]) != "undefined" && xmlNode.getElementsByTagName(nodeName)[i].hasChildNodes())
          node = xmlNode.getElementsByTagName(nodeName)[i].firstChild.nodeValue;
      
          return node; 
      }
      
      function getNodeLength(nodeName, xmlNode){
          return xmlNode.getElementsByTagName(nodeName).length;
      }
      

      下面你可以循环遍历

      var len = getNodeLength("Table",xml);
      var SubCategorySystem = "";
      var SubCategory = "";
      
      for(i=0;i<len;i++)
      {
          SubCategorySystem = getExtendedNodeValue("SubCategorySystem",xml,i);
          SubCategory = getExtendedNodeValue("SubCategory",xml,i);
      
          console.log(SubCategorySystem + " == " + SubCategory);
      }
      

      你可以找到这个FIDDLE

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-07-14
        • 1970-01-01
        • 2018-02-05
        • 2015-01-30
        • 2012-03-13
        • 2023-03-04
        相关资源
        最近更新 更多