【问题标题】:special characters on JSON to xmlJSON 到 xml 上的特殊字符
【发布时间】:2016-10-11 20:36:52
【问题描述】:

我正在使用 Javascript 和 PHP。

我创建了一个这样的 JSON:

[{"id": 32, "label": "Some Title", "type": "tinymce", "value": "<!DOCTYPE html>↵<html>↵<head>↵</head>↵<body>↵<p>asdasdasda&nbsp;30-09-2017</p>↵</body>↵</html>"}]

真正的 JSON 是一个长长的对象/数组数组。我正在创建一个 XML 文件(扩展名为 .xls),它将被 Excel 读取。使用普通字符,一切正常,但我不能放置这些特殊字符以让 Excel 读取该 XML 文件。我能做什么?

不能做的是:

  • 使用另一种格式:我需要读取扩展名为 .xls 的 XML。
  • 从 JSON 中更改数据,它是外部的。

按照我的做法,XML 会产生如下结果:

<ss:Row>
  <ss:Cell>
    <ss:Data ss:Type="String"></ss:Data>
  </ss:Cell>
  <ss:Cell>
    <ss:Data ss:Type="String"></ss:Data>
  </ss:Cell>
  <ss:Cell>
    <ss:Data ss:Type="String"></ss:Data>
  </ss:Cell>
  <ss:Cell>
    <ss:Data ss:Type="String">Objeto del contrato</ss:Data>
  </ss:Cell>
  <ss:Cell>
    <ss:Data ss:Type="String"><!DOCTYPE html> // I don't need all the html tags, I just need to put the text of the <p> tags.
<html>
<head>
</head>
<body>
<p>asdasdasda&nbsp;30-09-2017</p>
</body>
</html></ss:Data>//here ends the wrong text coming from the JSON
  </ss:Cell>
</ss:Row>

这对于 Excel 是不正确的。

【问题讨论】:

  • 如果我正确理解您的问题,您想在从 JSON 解析为 XML 时对 HTML 字符进行编码?

标签: javascript json xml excel


【解决方案1】:

由于value属性的内容是HTML,你可能有一个隐藏元素(甚至是一个没有附加到DOM的元素),将它的innerHTML设置为这个属性的内容,然后使用你喜欢的DOM 操作库(例如 jQuery)来读取 p 属性的内容。

例如,使用 jQuery:

var text = $('<div/>').html(o.value).find('p').text()

或者,您可以使用正则表达式来匹配 &lt;p&gt;&lt;/p&gt; 之间的内容,但如果格式有所不同,这可能会更加脆弱。在这种情况下,您还需要对 HTML 实体进行解码,这通常涉及执行与上述大部分相同的操作。

【讨论】:

  • 我在考虑使用正则表达式,但正如你所说,内容会有很大差异。它来自 Tinymce 编辑器,所以它可以是任何东西。我正在考虑你的第一个选择如何做到这一点......
【解决方案2】:

鉴于您在问题中提到您正在使用 PHP,我将假设您正在 PHP 中处理 JSON 以创建 XML 文件。

在这种情况下,您可以使用DOMXPath 从 HTML 值中查询确切的元素:

$html = "<!DOCTYPE html>
<html>
<head>
</head>
<body>
<p>asdasdasda&nbsp;30-09-2017</p>
</body>
</html>";

$doc = new DOMDocument;
$doc->loadHtml($html);
$xpath = new DOMXPath($doc);
$query = '/html/body/p';
$entries = $xpath->query($query);

print $entries->item(0)->nodeValue; //outputs 'asdasdasda 30-09-2017'

这假设 HTML 的结构总是相同的;如果情况发生变化,您需要更新您的 $query 变量。例如,为了选择文档中的所有p 标记,XPath 查询将是//p

【讨论】:

  • 我已经用 PHPExcel 做了类似的事情,但现在我不能用 PHP 做。我正在使用 ReactJS,我正在连接一些我在 javascript 中构建的字符串,然后我正在创建一个 xml 文件。数据在 DOM 上未显示为 html,它来自大型 JSON 的数据库,但我只需要其中的一些对象/数组。我有一个表格,它是一个表格列表,我单击该表格左侧列上的“导出到 Excel”按钮以导出所需表格,但我没有看到表格本身。
猜你喜欢
  • 2021-09-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多