【问题标题】:How to bind below sample xml data to jqgrid如何将以下示例 xml 数据绑定到 jqgrid
【发布时间】:2016-01-19 13:09:58
【问题描述】:

我有下面的 XML 数据,其中 name 作为 xml 标记元素,实际上是列名,并且重复次数与需要在行中填充的单元格值一样多。 Value 标签元素实际上是该列的行的值。

我需要做的是使用下面的 xml 我需要获取所有名称元素并将其作为列。请注意,如果 property 标签除了名称和值标签之外还包含 url 标签,那么我们应该将该列设置为超链接列。

输入

在这个例子中,我们应该得到一个标题行和 3 个数据行。

<entry>
  <properties xmlns="http://example.com" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
    <property>
      <name>Accessed</name>
      <value>14.01.2016 12:20:08</value>
    </property>
    <property>
      <name>Case no.</name>
      <url>http://localhost/locator.aspx?ID=200017</url>
      <value>16/00017</value>
    </property>
    <property>
      <name>Title</name>
      <url>http://localhost/locator.aspx?ID=200017</url>
      <value>San Case 16</value>
    </property>
    <property>
      <name>Type</name>
      <value>Case</value>
    </property>
    <property>
      <name>Responsible person</name>
      <value>Administrator</value>
    </property>
    <property>
      <name>Responsible unit</name>
      <value>Products</value>
    </property>
    <property>
      <name>Status</name>
      <value>In progress</value>
    </property>
  </properties>
  <properties xmlns="http://example.com" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
    <property>
      <name>Accessed</name>
      <value>14.01.2016 12:20:08</value>
    </property>
    <property>
      <name>Case no.</name>
      <url>http://localhost/locator.aspx?ID=200017</url>
      <value>16/00017</value>
    </property>
    <property>
      <name>Title</name>
      <url>http://localhost/locator.aspx?ID=200017</url>
      <value>San Case 16</value>
    </property>
    <property>
      <name>Type</name>
      <value>Case</value>
    </property>
    <property>
      <name>Responsible person</name>
      <value>Administrator</value>
    </property>
    <property>
      <name>Responsible unit</name>
      <value>Products</value>
    </property>
    <property>
      <name>Status</name>
      <value>In progress</value>
    </property>
  </properties>
  <properties xmlns="http://example.com" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
    <property>
      <name>Accessed</name>
      <value>14.01.2016 12:20:08</value>
    </property>
    <property>
      <name>Case no.</name>
      <url>http://localhost/locator.aspx?ID=200017</url>
      <value>16/00017</value>
    </property>
    <property>
      <name>Title</name>
      <url>http://localhost/locator.aspx?ID=200017</url>
      <value>San Case 16</value>
    </property>
    <property>
      <name>Type</name>
      <value>Case</value>
    </property>
    <property>
      <name>Responsible person</name>
      <value>Administrator</value>
    </property>
    <property>
      <name>Responsible unit</name>
      <value>Products</value>
    </property>
    <property>
      <name>Status</name>
      <value>In progress</value>
    </property>
  </properties>
</entry>

【问题讨论】:

  • 您应该 "accept" 旧答案和 vote 所有有用的答案和问题,您可以在 stackoverflow 上找到。通过在 stackoverflow 上搜索实际上不会找到不被接受的答案,并且投票计数低的答案将列在搜索结果的底部。如果不接受和使用投票,您就不会帮助 stackoverflow 的其他用户。顺便说一句,您每天有权投票最多 30 个问题和答案,但您在 1 年 8 个月内只使用了一次权利。
  • 你试过什么?你有什么具体问题?不难发现如何将 xml 解析为数组
  • @charlietfl 问题是我不明白 JqGrid 如何将名称理解为列名和值作为行?
  • @Oleg 感谢您为帮助和解决他人问题所做的努力。但是,如果我标记了不符合要求的答案,那么它可能会误导 stackoverflow 中的其他人。
  • 循环遍历数据并创建列数组数据....然后初始化 jQgrid

标签: jquery asp.net xml asp.net-mvc jqgrid


【解决方案1】:

在做了一些调查后,我发现这可以通过更改返回的数据并通过循环构造包含列数据、列模型和列名的 Json 对象来处理。我通过创建一个 Json 对象然后将其绑定到网格来做到这一点。

function xml2JsonInGridFormat(xml, visibleColoumns) {
                if (xml.length > 0) {
                    var xmlDoc = $.parseXML(xml)
                    var result = {};
                    var colData = new Array();
                    var colNames = new Array();
                    var colModels = new Array();
                    //Build column Name         
                    var NameProperties = xml[0].getElementsByTagName("name");
                    for (var j = 0; j < NameProperties.length; j++) {
                        var colName = NameProperties[j].childNodes[0].nodeValue;
                        colNames.push(colName);
                    }
                    //Build column Model
                    var Modelproperties = xml[0].getElementsByTagName("property");
                    for (var i = 0; i < Modelproperties.length; i++) {
                        var colModel = null;                     
                        colModel = {
                            'name': Modelproperties[i].getElementsByTagName("name")[0].childNodes[0].nodeValue,                            
                            sortable: true,
                            unformat: !!Modelproperties[i].getElementsByTagName("url").length,
                            shrinkToFit: false,
                            hidden: HideColumn(Modelproperties[i].getElementsByTagName("name")[0].childNodes[0].nodeValue, visibleColoumns),
                            width: "120px"                          
                        }                        
                        colModels.push(colModel);                        
                    }
                    //Build Row Data                    
                    for (var i = 0; i < xml.length; i++) {
                        var rows = xml[i].getElementsByTagName("property");
                        var row = {};
                        for (var j = 0; j < rows.length; j++) {
                            var cellKey = "", cellValue = "";
                            if (rows[j].getElementsByTagName("name")[0].childNodes[0] != undefined)
                                cellKey = rows[j].getElementsByTagName("name")[0].childNodes[0].nodeValue;
                            if (rows[j].getElementsByTagName("value")[0].childNodes[0] != undefined) {
                                if (rows[j].getElementsByTagName("url").length > 0)
                                    cellValue = buildURL($(rows[j].getElementsByTagName("url")).text(), HtmlEncode($(rows[j].getElementsByTagName("value")).text()));
                                else
                                    cellValue = HtmlEncode(rows[j].getElementsByTagName("value")[0].childNodes[0].nodeValue); //rows[j].getElementsByTagName("value")[0].childNodes[0].nodeValue;
                            }
                            row[cellKey] = cellValue;
                        }
                        colData.push(row);
                    }
                    result["ColNames"] = colNames;
                    result["ColModel"] = colModels;
                    result["ColData"] = colData;
                    return result;
                }

【讨论】:

    猜你喜欢
    • 2012-10-19
    • 1970-01-01
    • 1970-01-01
    • 2020-07-21
    • 1970-01-01
    • 2013-05-04
    • 1970-01-01
    • 2013-09-12
    • 2014-11-20
    相关资源
    最近更新 更多