【问题标题】:How to map an xml in jqGrid?如何在 jqGrid 中映射 xml?
【发布时间】:2026-01-06 12:20:05
【问题描述】:

我正在使用 jqGrid,我有一个给定的 xml,我想将其映射到 jqGrid

<list>
<com.abc.db.ConfigInfo>
<cfgId>83</cfgId>
<cfgName>test</cfgName>
<cfgDesc>test</cfgDesc>
<cfgType>test</cfgType>
<fileName>csmclientbenz.xml</fileName>
<absolutePath>../webapps/csm/files//1-105101/csmclientbenz.xml</absolutePath>
<emailAddress>abhishek@abc.com</emailAddress>
<projectId>1-105101</projectId>
<hostname>benz</hostname>
<createDate>2011-06-15 15:29:55.0 IST</createDate>
<updateDate>2011-06-15 15:29:55.0 IST</updateDate>
<state>1</state>
<productId>1</productId>
</com.abc.db.ConfigInfo>
<com.abc.db.ConfigInfo>
<cfgId>102</cfgId>
<cfgName>cfgname1</cfgName>
<cfgDesc>test</cfgDesc>
<cfgType>test</cfgType>
<fileName>csmclientestilo.xml</fileName>
<absolutePath>../webapps/csm/files//1-105101/csmclientestilo.xml</absolutePath>
<emailAddress>abhishek@abc.com</emailAddress>
<projectId>1-105101</projectId>
<hostname>estilo</hostname>
<createDate>2011-06-20 18:26:03.0 IST</createDate>
<updateDate>2011-06-20 18:26:03.0 IST</updateDate>
<state>1</state>
<productId>1</productId>
</com.abc.db.ConfigInfo>
</list>

我用过这样的东西,但请帮我从这里转移,我应该如何将来自XMLHttpRequestxml分配给jqGrid

var xml=client.responseText;
         $('#configDiv').empty();
            $('<div width="100%">')
            .attr('id','configDetailsGrid')
            .html('<table id="list1" width="100%"></table>'+
                    '<div id="gridpager"></div>'+
                '</div>')       
            .appendTo('#configDiv');    

            jQuery("#list1").jqGrid({
                datatype: "clientSide",
                height: 250,
                colNames:['cfgId','cfgName', 'cfgDesc', 'cfgType','absolutePath', 'updateDate', 'fileName'],
                colModel:[
                    {name:'cfgId',index:'cfgId', width:90, align:"right"},
                    {name:'cfgName',index:'cfgName', width:90, align:"right"},
                    {name:'cfgDesc',index:'cfgDesc', width:90, align:"right"},
                    {name:'cfgType',index:'cfgType', width:90, align:"right"},
                    {name:'absolutePath',index:'absolutePath', width:90, align:"right"},
                    {name:'updateDate',index:'updateDate', width:90, align:"right"},
                    {name:'fileName',index:'fileName', width:90, align:"right"},
                ],
                pagination:true,
                pager : '#gridpager',
                rowNum:10,
                scrollOffset:0,
                height: 'auto',
                autowidth:true,
                viewrecords: true,
                gridview: true,
 xmlReader: { 
                    root : "list",
                    row: "com.abc.db.ConfigInfo",
                    repeatitems: false,
                    id: "ASIN"
                    },
                edit:false,
                add:false,
                del:false

            });

稍后我还需要隐藏cfgidfilename。谢谢请帮忙

【问题讨论】:

    标签: jquery jqgrid


    【解决方案1】:

    你有特殊字符'.' (point) 在 XML 节点的名称中,所以你必须像这样转义字符:

    row: "com\\.abc\\.db\\.ConfigInfo"
    

    此外,您的数据具有节点而不是属性,因此您不需要在 jqGrid 读取数据之前对其进行转换。所以下面的代码会直接使用 XML 数据:

    jQuery('#list').jqGrid({
      url: 'Ricky.xml',
      datatype: 'xml',
      colNames:['cfgId','cfgName', 'cfgDesc', 'cfgType','absolutePath', 'updateDate', 'fileName'],
      colModel:[
          {name:'cfgId',index:'cfgId', width:90, align:"right"},
          {name:'cfgName',index:'cfgName', width:90, align:"right"},
          {name:'cfgDesc',index:'cfgDesc', width:90, align:"right"},
          {name:'cfgType',index:'cfgType', width:90, align:"right"},
          {name:'absolutePath',index:'absolutePath', width:90, align:"right"},
          {name:'updateDate',index:'updateDate', width:90, align:"right"},
          {name:'fileName',index:'fileName', width:90, align:"right"},
      ],
      pager : '#pager',
      rowNum:10,
      scrollOffset:0,
      height: 'auto',
      autowidth:true,
      viewrecords: true,
      gridview: true,
      xmlReader: {
          root : "list",
          row: "com\\.abc\\.db\\.ConfigInfo",
          repeatitems: false
      }
    });
    

    查看工作中的demo

    【讨论】:

    • @Oleg: 我的 xml 是我的 xml 变量,所以我应该使用 data: xml, datatype: "clientSide", 阅读它
    • @Oleg:我还需要两个隐藏列cfgidfilename,我应该把隐藏列放在colModel 中吗?这样在行点击时我想检索特定行的所有值,甚至是隐藏的值
    • @Ricky:我之前给你写过关于隐藏列的不同方法。您可以将hidden:true 属性用于filename 列,并从网格中删除cfgid 列。要将cfgid 用作rowid,您应该在xmlReader 中添加id: "cfgId"。见the modified demo
    • @Ricky:再说一句。如果您在 xml 变量中获取 XML 数据的包含只是为了将其转发到 jqGrid,您不需要这样做并允许 jqGrid 读取数据本身。如果您真的xml 变量中构造数据而需要将其用于其他目的,您可以使用datatype: 'xmlstring'datastr : xmldatatype: 'xmlstring'不仅支持字符串形式的数据(xml变量),还支持XMLDocument
    • @Oleg:谢谢它现在有效,我将我的响应分配给 xml 的原因是因为我从我的登录页面发送会话令牌,当前页面的 onLoad 使用该会话令牌将会话令牌发送到服务器端并收到xml 作为回复。所以我必须先保存回复。您的回答对我理解 jqGrid 有很大帮助。谢谢:)
    最近更新 更多