如何显示具有XML数据的字符串

时间:2015-09-28 14:56:59

标签: javascript java jquery json datatables

我的JSON数据是:

[
    {
        "serviceName":"test",
        "requestXML":"<soapenvelope><uname>testuser</uname></soapenvelope>"
    },
    {
        "serviceName":"test2",
        "requestXML":"<soapenvelope><uname>testuser2</uname></soapenvelope>"
    } 
]

调用后端的jQuery代码,返回此JSON数据

var postRequest = $.post(url);

postRequest.done(function( data ) {

      $('#tableid').dataTable( {
         "processing": true,
          destroy: true,
          "aaData": data,
          "aoColumns": [
                { "data": "serviceName" },
                { "data": "requestXML" },
          ]
      });     
});

现在,当它在屏幕上显示为jQuery DataTable时,我希望将整个XML打印出来。但它只打印testuser而不是整个XML。

有人可以帮我解决这个问题吗?

我已经验证了我的JSON数据正确无误。

3 个答案:

答案 0 :(得分:3)

  

<强>解

您可以使用$('<div/>').text(data).html()技巧对HTML实体进行编码。

例如:

$('#tableid').dataTable({
    "processing": true,
    "destroy": true,
    "data": data,
    "columns": [
       { 
          "data": "serviceName" 
       },
       { 
          "data": "requestXML",
          "render": function(data, type, full, meta){
              return $('<div/>').text(data).html();
          }
       }
    ]
});
  

<强>样本

请参阅this jsFiddle以获取代码和演示。

答案 1 :(得分:0)

您的服务器应该处理它发送的响应。而不是发送

[
{"serviceName":"test","requestXML":"<soapenvelope><uname>testuser</uname></soapenvelope>"},
 {"serviceName":"test2","requestXML":"<soapenvelope><uname>testuser2</uname></soapenvelope>"} 
]

它应该发送类似下面的内容

[
    {"serviceName":"test","requestXML":"&lt;soapenvelope&gt;&lt;uname&gt;testuser&lt;/uname&gt;&lt;/soapenvelope&gt;"},
     {"serviceName":"test2","requestXML":"&lt;soapenvelope&gt;&lt;uname&gt;testuser2&lt;/uname&gt;&lt;/soapenvelope&gt;"} 
    ]

如果无法做到(您无法控制服务器),则以下链接应该有所帮助 Escape markup in JSON-driven jQuery datatable?

答案 2 :(得分:0)

首先,您需要XML转义函数(取自here):

var XML_CHAR_MAP = {
  '<': '&lt;',
  '>': '&gt;',
  '&': '&amp;',
  '"': '&quot;',
  "'": '&apos;'
}

function escapeXml (s) {
  return s.replace(/[<>&"']/g, function (ch) {
    return XML_CHAR_MAP[ch]
  })
}

然后您可以使用它来渲染单元格内容:

{
  data: "requestXML",
  render: function(data, method, object, pos) {
    return '<pre>' + escapeXml(data) + '</pre>'
  }
}

现在您的XML应该可见。如果不需要,请删除pre标记。