【问题标题】:how to convert array to xml for docx php如何将数组转换为 xml 用于 docx php
【发布时间】:2017-04-13 08:05:45
【问题描述】:

我将 XML 文件从 DOCX(ZIP 存档)解析为 xml_parse_into_struct 的数组。结果如下。

Array
(

[0] => Array
    (
        [tag] => W:DOCUMENT
        [type] => open
        [level] => 1
        [attributes] => Array
            (
                [XMLNS:WPC] => http://schemas.microsoft.com/office/word/2010/wordprocessingCanvas
            )
    )

[1] => Array
    (
        [tag] => W:BODY
        [type] => open
        [level] => 2
    )

[2] => Array
    (
        [tag] => W:P
        [type] => open
        [level] => 3
        [attributes] => Array
            (
                [W:RSIDR] => 00383EED
                [W:RSIDRDEFAULT] => 00383EED
                [W:RSIDP] => 001F2B24
            )
    )
...
[15] => Array
    (
        [tag] => W:P
        [type] => close
        [level] => 3
    )
...
[2348] => Array
    (
        [tag] => W:BODY
        [type] => close
        [level] => 2
    )

[2349] => Array
    (
        [tag] => W:DOCUMENT
        [type] => close
        [level] => 1
    )
)

经过一些更改后,我需要先将其转换回 XML 文件(然后再转换为 DOCX 文件)。这是我需要的 XML 文件的结构:

<w:document xmlns:wpc="http://schemas.microsoft.com/office/word/2010/wordprocessingCanvas">
    <w:body>
        <w:p w:rsidR="00383EED" w:rsidRDefault="00383EED" w:rsidP="001F2B24">...</w:p>
    ...
    </w:body>
</w:document>

我该怎么做?

【问题讨论】:

  • 嗨@hassan。感谢您的快速回复。但这不是我需要的结果。我知道如何从数组中创建简单的 XML 文件。但在这里我需要做一个带有子元素和属性的 XML 文件。
  • 请使用有效的可执行 php 数组更新您的问题

标签: php xml parsing docx


【解决方案1】:

最后,写了一个小而简单的函数,它将上面的数组转换为XML格式。这是解决方案:

public function array_to_xml($array)
{
    $xml = '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>';

    foreach ($array as $tag) {
        $xml .= '<';
        $xml .= ($tag['type'] === 'close') ? '/' . $tag['tag'] : $tag['tag'];

        if (isset($tag['attributes'])) {
            foreach ($tag['attributes'] as $key => $attr) {
                $xml .= ' ' . $key . '="' . $attr . '"';
            }
        }

        if ($tag['type'] === 'complete' && !isset($tag['value'])) {
            $xml .= '/';
        }
        $xml .= '>';

        if (isset($tag['value'])) {
            $xml .= $tag['value'] . '</' . $tag['tag'] . '>';
        }
    }

    return $xml;
}

【讨论】:

    猜你喜欢
    • 2019-09-07
    • 1970-01-01
    • 2017-09-23
    • 2011-12-25
    • 2015-09-03
    • 2016-10-03
    • 1970-01-01
    • 1970-01-01
    • 2011-09-28
    相关资源
    最近更新 更多