循环遍历xml并在警报中显示值

时间:2014-01-08 13:25:56

标签: javascript jquery xml alerts

我有一个设置为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>" 

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

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

将它包裹在一个对象中它应该可以正常工作

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

答案 2 :(得分:0)

你可以先引用这两个函数

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