rene-roscher/array-to-xml

2.11.2 2019-08-21 06:32 UTC

README

Latest Version Software License Build Status Quality Score StyleCI Total Downloads

此包提供了一个将数组转换为XML字符串的简单类。

支持我们

通过观看我们的高级视频课程,了解如何创建此类包

Laravel Package training

我们投入了大量资源来创建最佳的开源包。您可以通过购买我们的付费产品之一来支持我们。

我们非常感谢您从家乡寄来明信片,注明您正在使用我们的哪个包。您可以在我们的联系页面找到我们的地址。我们将在我们的虚拟明信片墙上公布所有收到的明信片。

安装

您可以通过composer安装此包。

composer require spatie/array-to-xml

用法

use Spatie\ArrayToXml\ArrayToXml;
...
$array = [
    'Good guy' => [
        'name' => 'Luke Skywalker',
        'weapon' => 'Lightsaber'
    ],
    'Bad guy' => [
        'name' => 'Sauron',
        'weapon' => 'Evil Eye'
    ]
];

$result = ArrayToXml::convert($array);

运行此代码段后,$result将包含

<?xml version="1.0"?>
<root>
    <Good_guy>
        <name>Luke Skywalker</name>
        <weapon>Lightsaber</weapon>
    </Good_guy>
    <Bad_guy>
        <name>Sauron</name>
        <weapon>Evil Eye</weapon>
    </Bad_guy>
</root>

设置根元素的名称

您可以可选地通过将根元素的名称作为第二个参数传递来设置rootElement的名称。如果您不指定此参数(或将其设置为空字符串),则将使用“root”。

$result = ArrayToXml::convert($array, 'customrootname');

处理键名

默认情况下,您的数组键名中的所有空格都将被转换为下划线。如果您想取消此行为,可以将第三个参数设置为false。我们将保留所有键名。

$result = ArrayToXml::convert($array, 'customrootname', false);

添加属性

您可以使用名为_attributes的键向节点添加属性,并使用_value来指定值。

$array = [
    'Good guy' => [
        '_attributes' => ['attr1' => 'value'],
        'name' => 'Luke Skywalker',
        'weapon' => 'Lightsaber'
    ],
    'Bad guy' => [
        'name' => 'Sauron',
        'weapon' => 'Evil Eye'
    ],
    'The survivor' => [
        '_attributes' => ['house'=>'Hogwarts'],
        '_value' => 'Harry Potter'
    ]
];

$result = ArrayToXml::convert($array);

此代码将产生

<?xml version="1.0"?>
<root>
    <Good_guy attr1="value">
        <name>Luke Skywalker</name>
        <weapon>Lightsaber</weapon>
    </Good_guy>
    <Bad_guy>
        <name>Sauron</name>
        <weapon>Evil Eye</weapon>
    </Bad_guy>
    <The_survivor house="Hogwarts">
        Harry Potter
    </The_survivor>
</root>

使用保留字符

您也可以将节点的值包装在CDATA部分中。这允许您使用保留字符。

$array = [
    'Good guy' => [
        'name' => [
            '_cdata' => '<h1>Luke Skywalker</h1>'
        ],
        'weapon' => 'Lightsaber'
    ],
    'Bad guy' => [
        'name' => '<h1>Sauron</h1>',
        'weapon' => 'Evil Eye'
    ]
];

$result = ArrayToXml::convert($array);

此代码将产生

<?xml version="1.0"?>
<root>
    <Good_guy>
        <name><![CDATA[<h1>Luke Skywalker</h1>]]></name>
        <weapon>Lightsaber</weapon>
    </Good_guy>
    <Bad_guy>
        <name>&lt;h1&gt;Sauron&lt;/h1&gt;</name>
        <weapon>Evil Eye</weapon>
    </Bad_guy>
</root>

如果您的输入包含无法解析的内容,将抛出DOMException

添加根元素的属性

要添加根元素的属性,请提供包含_attributes键的数组作为第二个参数。然后可以使用rootElementName键设置根元素名称。

$result = ArrayToXml::convert($array, [
    'rootElementName' => 'helloyouluckypeople',
    '_attributes' => [
        'xmlns' => 'https://github.com/spatie/array-to-xml',
    ],
], true, 'UTF-8');

使用多维数组

使用多维数组创建元素集合。

$array = [
    'Good guys' => [
        'Guy' => [
            ['name' => 'Luke Skywalker', 'weapon' => 'Lightsaber'],
            ['name' => 'Captain America', 'weapon' => 'Shield'],
        ],
    ],
    'Bad guys' => [
        'Guy' => [
            ['name' => 'Sauron', 'weapon' => 'Evil Eye'],
            ['name' => 'Darth Vader', 'weapon' => 'Lightsaber'],
        ],
    ],
];

这将产生

<?xml version="1.0" encoding="UTF-8"?>
<helloyouluckypeople xmlns="https://github.com/spatie/array-to-xml">
    <Good_guys>
        <Guy>
            <name>Luke Skywalker</name>
            <weapon>Lightsaber</weapon>
        </Guy>
        <Guy>
            <name>Captain America</name>
            <weapon>Shield</weapon>
        </Guy>
    </Good_guys>
    <Bad_guys>
        <Guy>
            <name>Sauron</name>
            <weapon>Evil Eye</weapon>
        </Guy>
        <Guy>
            <name>Darth Vader</name>
            <weapon>Lightsaber</weapon>
        </Guy>
    </Bad_guys>
</helloyouluckypeople>

处理数字键

该包还可以处理数字键

$array = [
    100 => [
        'name' => 'Vladimir',
        'nickname' => 'greeflas',
    ],
    200 => [
        'name' => 'Marina',
        'nickname' => 'estacet',
    ],
];

$result = ArrayToXml::convert(['__numeric' => $array]);

这将产生

<?xml version="1.0" encoding="UTF-8"?>
<root>
    <numeric_100>
        <name>Vladimir</name>
        <nickname>greeflas</nickname>
    </numeric_100>
    <numeric_200>
        <name>Marina</name>
        <nickname>estacet</nickname>
    </numeric_200>
</root>

您可以通过名为setNumericTagNamePrefix()的setter方法更改键前缀。

设置DOMDocument属性

要设置内部DOMDocument对象的属性,只需传递一个包含键和值的数组。有关有效属性的完整列表,请参阅https://php.ac.cn/manual/en/class.domdocument.php

您可以使用构造函数来设置DOMDocument属性。

$result = ArrayToXml::convert(
   $array, 
   $rootElement, 
   $replaceSpacesByUnderScoresInKeyNames, 
   $xmlEncoding, 
   $xmlVersion, 
   ['formatOutput' => true]
);

或者,您可以使用setDomProperties

$arrayToXml = new ArrayToXml($array);
$arrayToXml->setDomProperties(['formatOutput' => true]);
$result = $arrayToXml->toXml();

测试

vendor/bin/phpunit

变更日志

请参阅CHANGELOG以获取有关最近更改的更多信息。

贡献

请参阅CONTRIBUTING以获取详细信息。

安全

如果您发现任何与安全相关的问题,请通过freek@spatie.be发送电子邮件,而不是使用问题跟踪器。

明信片软件

您可以自由使用此包,但如果它进入您的生产环境,我们非常希望您能从家乡寄来明信片,注明您正在使用我们的哪个包。

我们的地址是:Spatie,Samberstraat 69D,2060 安特卫普,比利时。

我们将在公司网站上发布所有收到的明信片。请点击这里查看。

致谢

许可证

MIT许可证(MIT)。有关更多信息,请参阅许可证文件