jQuery XML 解析/遍历

Posted

技术标签:

【中文标题】jQuery XML 解析/遍历【英文标题】:jQuery XML Parsing/Traversing 【发布时间】:2010-11-04 13:23:36 【问题描述】:

我有以下 XML-

<rows>
   <row id="5">
      <cell>Item1</cell>
   <attrs>
    <attr>
      <id>1</id>
      <type>CheckBox</type>
      <values>
        <value>
          <id>10</id>
        </value>
        <value>
          <id>11</id>
        </value>
      </values>
    </attr>
     <attr>
       <id>2</id>
       <type>CheckBox</type>
       <values>
         <value>
           <id>20</id>
         </value>
         <value>
           <id>21</id>
         </value>
       </values>
     </attr>
  </attrs>
   </row>
</rows>

我想要做的是循环某一行的每一行。

我尝试这样做是为了获取所有 attr id,但我也得到了值 id。

function fillForm(id)
    var theRow = $(theXmlDoc).find('row[id='+id+']').get()

    $(theRow).find("attr").each(function(i) 
    
        alert($(this).find("id").text());
    );

我还想指出,主要目标是循环每个 attr,然后在我有 attr 的 id 时循环每个值。

P.S 如果您想到使用其他一些库的更简单/更简单的方法,我愿意提供建议。

提前致谢,

【问题讨论】:

刚刚遇到了几乎完全相同的问题。 +1 【参考方案1】:

这应该适合你

function fillForm(id)
    var row = $(theXmlDoc).find('row#+'+ id);
    var ids = row.find( "attr > id");

    ids.each(function(i) 
    
        alert($(this).text());
    );

PS。您可以使用xpath:

var ids = document.evaluate( '//rows/row[@id='+id + ']/attr/id/text( )', theXmlDoc, null, XPathResult.ANY_TYPE, null );

【讨论】:

已编辑。抱歉,我无法在这里测试。【参考方案2】:

我不清楚您要循环什么,我认为您问题中的标签之一是乱码。你说:“我想做的是循环某一行的每一行。”我想你那里有一个标签。

无论如何,这里有一些使用 jQuery 从解析的 xml 文档中提取数据的示例。 cmets 显示将被警告的内容。

我认为部分问题是您将 id 值作为兄弟姐妹而不是属性的孩子。看起来更连贯的结构可能是:

<rows>
    <row id="5">
        <cell>Item1</cell>
        <attrs>
            <attr id="1">
                <type>CheckBox</type>
                <values>
                    <value>
                        <id>10</id>
                    </value>
                    <value>
                        <id>11</id>
                    </value>
                </values>
            </attr>
            <attr id="2">
                <type>CheckBox</type>
                <values>
                    <value>
                        <id>20</id>
                    </value>
                    <value>
                        <id>21</id>
                    </value>
                </values>
            </attr>
        </attrs>
    </row>
</rows>

但如果您无法控制 xml,请忽略该建议。 :-)

好的,下面是一些遍历获取各种数据的示例:

首先让我们获取“Item1”

<script type="text/javascript">
// Item1
$.get('sample.xml', null, function (data, textStatus) 
    alert( $(data).find('rows row[id=5] cell').text());
, 'xml');
</script>

现在我们将得到 1 和 2:

<script type="text/javascript">
// 1
// 2
$.get('sample.xml', null, function (data, textStatus) 
    $(data).find('rows row[id=5] attrs attr > id').each( function()
            alert($(this).text()); // 1, 2
    );
, 'xml');
</script>

最后,让我们提取主要的 attr id 并将它们绑定到值中:

<script type="text/javascript">
// rows row[id=5] attrs attr > id 1 has inner ids of 10,11
// rows row[id=5] attrs attr > id 2 has inner ids of 20,21
$.get('sample.xml', null, function (data, textStatus) 

        var out = ''
        $(data).find('rows row[id=5] attrs attr > id').each( function()
                out += 'rows row[id=5] attrs attr > id ' + $(this).text();
                var innerIds = [];
                $(this).siblings('values').find('value id').each(function()
                    innerIds.push($(this).text())
                );
                out += ' has inner Ids of ' + innerIds.join(',') + '\n';
        );
        alert(out);
    , 'xml');
</script>

【讨论】:

基本上我想要循环的是attrs,对于每个attr我需要获取他的每个值,除了获取attr的id之外,我无法更改xml所以我需要一个解决方案。明天我有我的工作站后,我会试试你的代码,谢谢。

以上是关于jQuery XML 解析/遍历的主要内容,如果未能解决你的问题,请参考以下文章

JQuery解析XML数据的demo

160928JQuery解析XML数据的demo

jquery 源码解析 节点遍历

使用 jQuery Mobile 进行 XML 解析

jquery解析xml

使用 jQuery 解析 xml 模板