【问题标题】:Converting DOCX / Word-generated XML to JSON将 DOCX / Word 生成的 XML 转换为 JSON
【发布时间】:2019-06-06 10:05:18
【问题描述】:

我正在尝试通过 PHP 将 Word 生成的 XML 文件转换为 JSON。

我环顾四周,发现所有 XML 文件最好的情况是以下代码(甚至在 PHP 文档中):

$xml = simplexml_load_string($xml_string);
$json = json_encode($xml);
$array = json_decode($json,TRUE);

问题是在simplexml_load_string 之后我得到一个空的SimpleXMLElement 对象,其余步骤无法真正完成。 xml 本身开头为:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<w:wordDocument 

标签的前缀为w:。 我尝试删除 w:s 但该函数再次返回一个空对象。知道我可能会错过什么吗?这种生成的 XML 有什么特别之处吗?

【问题讨论】:

  • 简短回答:不要。 Word 是一种具有混合节点的复杂格式。将其解析为 SimpleXML 对象并对其进行序列化将不起作用(您会丢失大量信息),并且任何保留该信息的 JSON 结构都将与原始 XML 一样复杂。尝试使用 DOM 和 Xpath(更好地处理命名空间和混合节点)从 XML 中读取您需要的特定信息,并从中构建数组/对象结构。对生成的结构进行编码。
  • 我不会说不要。 This python package 就是这样做的。您必须将 doc 从 PHP 传递到 python 服务器(aiohttp / django 等),但 that isn't impossible

标签: php json xml openxml docx


【解决方案1】:

@ThW is 正确:不要将 OOXML 转换为 JSON。没有帮助。

OOXML(DOCX 背后的标准)的复杂性不会被转换为 JSON 所驯服。成功的 JSON 转换将具有挑战性,并且只会真正用于提供对使用 XML 处理文档和 JSON 处理数据 的一般建议的欣赏。

另请参阅JSON or XML? Which is better? 并注意:

  • OOXML 是现有的、高度复杂的文档标准,而不是数据
  • 现有的 OOXML 工具基础架构 100% 基于 XML。
  • 表示文档需要表示混合内容 – JSON 不适合做的事情。1

1 有点讽刺的是, OOXML 中很少使用混合内容:文本运行通常是 包裹在w:r/w:t 元素中。如果你正在寻找灵感 基于 JSON 的 DOCX 表示将是可能的,就是这样。 如果您想了解 JSON 如何驯服 DOCX 复杂性,这也应该有所帮助。 :-)

【讨论】:

    【解决方案2】:

    看看这个问题:Simplexml_load_string($string) returns an empty object but $string contains xml? code below

    很相似。

    您可以尝试打印 $xml 吗? 也许错误不是 simplexml_load_string 而是 json_encode...

    BR 马克

    【讨论】:

      猜你喜欢
      • 2021-10-05
      • 2017-09-23
      • 1970-01-01
      • 2018-10-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-20
      相关资源
      最近更新 更多