jquery xml解析无法正常工作

时间:2012-02-18 18:13:45

标签: xml jquery

我正在尝试解析xml,但它没有返回任何内容

下面是代码jquery和xml代码。我有什么问题吗?

<script language="javascript">

   /* $(document).ready(function()
    {
      $.ajax({
        type: "GET",
        url: "view_xml.xml",
        dataType: "xml",
        success: function(xml) { parseXml(xml); }
      });
    });
    */
$(document).ready(function()
{
  $.ajax({
    type: "GET",
    url: "view_xml.xml",
    dataType: "xml",
    complete: function(data,status) { parseXml(data.responseXML); }
  });
});

function parseXml(xml)
{
  $(xml).find("inst:cView").each(function()
  {
    $("#output").append($(this).attr("type") + "<br />");
    /* output
    Disks
    Disks

    */
  });

 $(xml).find("inst:field").each(function()
  {
    $("#output").append($(this).attr("name") + "-");
    $("#output").append(": " + $(this).find("name").text() + "<br />");
    /* output
     TargetObjectClass -:Disk
     TargetObjectName -:DISK A1
     DisplayName -:DISK-Name
     MaxAvgDataRate KB/sec -:50.00 KB/sec
     MaxAvgQueueDepth -:50.00 
     ...
     ...

    */
  });
}
</script>

XML代码

<?xml version="1.0" encoding="utf-8"?>
    <entry>
    ----
    ----
    <cView type="D1">
                    <field name="TargetObjectClass">Disk</field>
                    <field name="TargetObjectName">DISK A1</field>
                    <field name="DisplayName">DISK-Name</field>
                    <field name="MaxAvgDataRate KB/sec">50.00 KB/sec</field>
                    <field name="MaxAvgQueueDepth">50.00</field>
                </cView>
                <cView type="D2">
                    <field name="TargetObjectClass">Disk</field>
                    <field name="TargetObjectName">DISK B2</field>
                    <field name="DisplayName"> Disk-Name 2 </field>
                    <field name="MaxAvgDataRate KB/sec">60.00 KB/sec</field>
                    <field name="MaxAvgQueueDepth">60.00</field>
                </cView>


    ...
    </entry>

1 个答案:

答案 0 :(得分:1)

尝试以下

$(document).ready(function()
{
  $.ajax({
    type: "GET",
    url: "view_xml.xml",
    dataType: "xml",
    complete: function(data,status) { parseXml(data.responseText); }
  });
});

关于xml标记的修改:

Using data.responseText
And <cView type="..."> instead of <inst:Cview type="..."> works like a charm.
The same for <field ...> instead <inst:field ...>.

因为“:”使选择器搜索一些“伪元素”而不是标记。

所以,最后,你必须逃避':',就像那样:

$(xml).find("inst\\:cView")...
$(xml).find("inst\\:field")...

关于新XML的修改

要获得数据的树状结构,请使用以下命令:

function parseXml(xml)
{
  $(xml).find("cView").each(function()
  {
    $("#output").append($(this).attr("type") + "<br/>"); 
    $(xml).find("field").each(function()
    {
        $("#output").append($(this).attr("name") + " : ");
        $("#output").append($(this).text() + "<br/>");
    });
    $("#output").append("<hr/>"); 
  });
}

每个“字段”的内容为$(this).text();