【问题标题】:Parsing data with jQuery使用 jQuery 解析数据
【发布时间】:2011-04-28 10:14:39
【问题描述】:
<?xml version="1.0" encoding="utf-8"?>
<blamatrixrix>
<name></name>
<columns number="2">
 <column id="title" num="0">Title</column>
 <column id="content" num="1">Content</column>
</columns>
<rows number="7"></rows>
<b>Description</b>
<b>Description text here</b>
<b>Some title 1</b>
<b>Some text blabla for Some title 1</b>
<b>Some title 2</b>
<b>Some text blabla for Some title 2</b>
<b>Some title 3</b>
<b>Some text blabla for Some title 3</b>
<b>Some title 4</b>
<b>Some text blabla for Some title 4</b>
<b>Some title 5</b>
<b>Some text blabla for Some title 5</b>
<b>Some title 6</b>
<b>Some text blabla for Some title 6</b>
</blamatrixrix>

我需要将这些数据解析到表格中,以便其他所有 content 都进入一个 own 并且每个其他的都在 own 中。

最终看起来像这样:

<tr><td>Some title 1</td>  <td>Some title 2'</td> <td>Some title 3</td>  <td>Some title 4'</td></tr>
<tr><td>Some text 1</td><td>Some text 2</td><td>Some text 3</td><td>Some text 4</td></tr>

我应该如何开始?谢谢。

编辑:我知道 XML 不像它应该的那样,但我对此无能为力。我只需要在它这样的时候解析它。

【问题讨论】:

    标签: jquery xml-parsing


    【解决方案1】:

    首先,您的 XML 无效:

    <b>Description</c>
    

    应该是

    <b>Description</b>
    

    和

    <bDescription text here</b>
    

    应该是

    <b>Description text here</b>
    

    编辑:您还应该考虑将 XML 结构更改为更合乎逻辑的结构,例如

    <rows number="7">
        <row>
            <description>Description</description>
            <text>Description text here</text>
        </row>
        ...
    </rows>
    

    编辑 #2:您也可以只使用 jQuery 来解析和遍历您的 XML,如下所示:

    $(xml_string).children().each(function(c) {
        // do something
    });
    

    甚至更好:

    parseXMLValue($(xml_string).find('noniterablenode').text());
    ...
    $(xml_string).find('iterablenode').each(function(e) {
        // do something with your iterable elements
    });
    

    等,其中parseXMLValue() 将是您自己的函数来使用特定 XML 节点的值。

    【讨论】:

    • 对不起,我的复制和粘贴很糟糕。就是这样。
    • 是的,我知道这不是很合乎逻辑,但不幸的是我不能对 xml 做任何事情。我只需要从中解析它,我不知道从哪里开始。
    • 这似乎工作 :) 谢谢你。 $(xml_string).children().each(function(c) { // 做某事 });但我不知道如何继续。某种循环然后把它放在桌子上?如果我 conglose.log c 我只得到数字 1-16。数组?
    • 您可以在该函数内使用$(this) 来引用迭代中的当前子项 - 通常您可以 a) 通常使用这些循环/xml 解析来管理 Javascript 数据结构(数组/哈希/等)或您需要的任何变量;然后,您可以使用该数据创建 HTML(可能迭代地)。如果您确定您的数据将是一致且有效的,您可以在解析 XML 时开始创建表格元素。
    【解决方案2】:

    修复错误后,您可以执行以下操作:

    $.ajax( 
      url: "path/to/file.xml", 
      type: "GET", 
      dataType:"xml", 
      success: function(xml){ 
        var cols = [];
    
        $(xml).find("col").each(function(){
          cols.push({
            id:$(this).attr('id'),
            text:$(this).text()
          });
        });
    
        $(xml).find("row").each(function(){
          var info = "<tr>";
    
          for(var i = 0; i < cols.length; i++) {
            info += "<td>" + $(this).find(cols[i].id).text() + "</td>";
          }
    
          info += "</tr>";
    
          $("#table").append(info);
        });
      },
      error : function(){ //some code}
    });
    

    这适用于以下 XML 文档。

    <?xml version="1.0" encoding="utf-8"?>
    <tableinfo>
      <columns>
        <col id="title">Title</column>
        <col id="content">Content</column>
      </columns>
      <rows>
        <row>
          <title>test</title>
          <content>text content</content>
        </row>
        <row>
          <title>test2</title>
          <content>more text content</content>
        </row>
      </rows>
    </tableinfo>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-06-03
      • 1970-01-01
      • 1970-01-01
      • 2010-12-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-15
      相关资源
      最近更新 更多