从JSON到xml的特殊字符

special characters on JSON to xml

本文关键字:特殊字符 xml JSON      更新时间:2023-09-26

我正在使用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中是不正确的

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

例如,使用jQuery:
var text = $('<div/>').html(o.value).find('p').text()

或者,您可以使用regex来匹配<p></p>之间的内容,尽管如果格式有所不同,这可能会更脆弱。在这种情况下,您还需要解码HTML实体,这通常涉及与上述相同的操作。

考虑到您在问题中提到您正在使用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 .