如何使用jQuery解析XML?

时间:2011-08-29 09:04:22

标签: javascript jquery xml

如何解析XML,以及如何使用jQuery导航结果?这是我的示例XML:

<Pages>
  <Page Name="test">
    <controls>
      <test>this is a test.</test>
    </controls>
  </Page>
  <Page Name = "User">
    <controls>
      <name>Sunil</name>
    </controls>
  </Page>
</Pages>

我想通过此路径查找节点Pages - &gt; Page Name - &gt; controls - &gt; test

7 个答案:

答案 0 :(得分:39)

$.parseXML功能:http://api.jquery.com/jQuery.parseXML/

你可以像这样使用它:

var xml = $.parseXML(yourfile.xml),
  $xml = $( xml ),
  $test = $xml.find('test');

console.log($test.text());

如果你真的想要一个对象,你需要一个插件。例如,这个插件会将您的XML转换为JSON:http://www.fyneworks.com/jquery/xml-to-json/

答案 1 :(得分:16)

您可以使用.parseXML

var xml='<Pages>
          <Page Name="test">
           <controls>
              <test>this is a test.</test>
           </controls>  
          </Page>
          <page Name = "User">
           <controls>
             <name>Sunil</name>
           </controls>
          </page>
        </Pages>';

jquery的

    xmlDoc = $.parseXML( xml ),
    $xml = $( xmlDoc );
    $($xml).each(function(){
       alert($(this).find("Page[Name]>controls>name").text());
     });

这里是小提琴http://jsfiddle.net/R37mC/1/

答案 2 :(得分:12)

我假设您正在从外部文件加载XML。使用$.ajax(),实际上非常简单:

$.ajax({
    url: 'xmlfile.xml',
    dataType: 'xml',
    success: function(data){
        // Extract relevant data from XML
        var xml_node = $('Pages',data);
        console.log( xml_node.find('Page[Name="test"] > controls > test').text() );
    },
    error: function(data){
        console.log('Error loading XML data');
    }
});

此外,您应该对XML节点命名保持一致。您同时拥有小写和大写的节点名称(<Page><page>),当您尝试使用XML树选择器时,这可能会造成混淆。

答案 3 :(得分:9)

$xml = $( $.parseXML( xml ) );

$xml.find("<<your_xml_tag_name>>").each(function(index,elem){
    // elem = found XML element
});

答案 4 :(得分:2)

看一下jQuery的.parseXML() [docs]

var $xml = $(jQuery.parseXML(xml));

var $test = $xml.find('Page[Name="test"] > controls > test');

答案 5 :(得分:1)

我采用了jQuery的.parseXML()的方式,然而发现'Page[Name="test"] > controls > test'的XML路径语法不起作用(如果有人知道为什么请大声喊出来!)。

相反,我将单个.find()结果链接在一起,形成如下:

$xmlDoc.find('Page[Name="test"]')
       .find('contols')
       .find('test')

结果与我期望的一次发现相同。

答案 6 :(得分:0)

谷歌搜索结果http://think2loud.com/224-reading-xml-with-jquery/中弹出的第一件事 在没有任何插件的情况下,没有简单的方法可以在jQuery中访问xml结构(就像你描述的 Pages-&gt; pagename-&gt; controls-&gt; test )。