lucid / xml
Requires
- php: >=5.6.0
- lucid/common: dev-master
Requires (Dev)
- phpunit/phpunit: ^5.2
This package is not auto-updated.
Last update: 2024-09-14 19:09:20 UTC
README
安装
$ composer require lucid/xml
测试
使用以下命令运行测试
$ ./vendor/bin/phpunit
解析器
Parser
类可以将 xml 字符串、文件、DOMDocuments 和 DOMElements 解析成 PHP 数组。
解析 xml 字符串
<?php use Lucid\Xml\Parser; $parser = new Parser; $parser->parse('<data><foo>bar</foo></data>');
解析 xml 文件
<?php use Lucid\Xml\Parser; $parser = new Parser; $parser->parse('/path/to/data.xml');
解析 DOMDocument
<?php use Lucid\Xml\Parser; $parser = new Parser; $parser->parseDom($dom);
解析 DOMElement
<?php use Lucid\Xml\Parser; $parser = new Parser; $parser->parseDomElement($element);
解析器选项
处理属性
XML 属性被捕获为实际节点数据中的一个专用部分。该部分的键默认为 @attributes
,但可以使用 setAttributesKey
方法进行更改。
<?php use Lucid\Xml\Parser; $xml = '<data><node id="1">some text</node></data>' $parser = new Parser; $parser->setAttributesKey('__attrs__'); $parser->parse($xml);
['data' => ['node' => ['__attrs__' => ['id' => 1], 'value' => 'some text']]];
合并属性
设置 Parser::mergeAttributes(true)
将合并任何属性作为键/值合并到数据集中。
$parser->setMergeAttributes(true); $parser->parse($xml);
上面的示例将输出类似于以下的内容
['data' => ['node' => ['id' => 1, 'value' => 'some text']]];
规范化键
您可以通过设置键规范化回调函数来指定如何转换键。
默认规范化将破折号转换为下划线,并将驼峰式转换为蛇形表示法。
<?php use Lucid\Xml\Parser; $parser = new Parser; $parser->setKeyNormalizer(function ($key) { // do string transfomations return $key; }); $parser->parseDomElement($element);
设置索引键
这会强制解析器将具有指定键的 nodeName 的节点处理为列表。
<?php use Lucid\Xml\Parser; $parser = new Parser; $parser->setIndexKey('item');
设置复数化器
默认情况下,解析器将解析 XML 结构,例如
<entries> <entry>1</entry> <entry>2</entry> </entries>
变为如下所示
<?php ['entries' => ['entry' => [1, 2]]]
设置复数化器可以解决这个问题。
注意,复数化器可以是任何 可调用,它接受一个字符串并返回一个字符串。
<?php $parser->setPluralizer(function ($string) { if ('entry' === $string) { return 'entries'; } });
<?php ['entries' => [1, 2]]
写入器
将 PHP 数据转储为 XML 字符串
<?php use Lucid\Xml\Writer; $writer = new Writer; $data = [ 'foo' => 'bar' ]; $writer->dump($data); // <root><foo>bar</foo></root> // set the xml root node name: $writer->dump($data, 'data'); // <data><foo>bar</foo></data>
将 PHP 数据转储为 DOMDocument
注意:这将创建一个 Lucid\Xml\Dom\DOMDocument
实例。
<?php use Lucid\Xml\Writer; $writer = new Writer; $data = [ 'foo' => 'bar' ]; $dom = $writer->writeToDom($data);
写入器选项
设置规范化实例
通常,当实例化新的 Writer
时,会为您设置 NormalizerInterface
实现,但是您可以设置自己的规范化实例。
注意:规范化必须实现 Lucid\Xml\Normalizer\NormalizerInterface
接口。
<?php use Lucid\Xml\Writer; use Lucid\Xml\Normalizer\Normalizer; $writer = new Writer(new Normalizer); // or $writer->setNormalizer($myNormalizer);
设置屈折变化器
屈折变化器是解析器复数化器的完全相反。它将字符串转换为单数。
<?php $writer->setInflector(function ($string) { if ('items' === $string) { return 'item'; } });
设置文档编码
默认编码为 UTF-8
。
<?php $writer->setEncoding($encoding); // string
设置属性键映射
如果您想输出某些键作为 XML 属性,这将很有用。
<?php $writer->setKeyMap([ 'nodeName' => ['id', 'entry'] // nested keys 'id' and 'entry' of the key element 'nodeName' will be set as attributes instead of childnodes. ]);
注意:您还可以使用 addMappedAttribute($nodeName, $attributeName)
添加更多映射属性。
设置值键
<?php $data = [ 'foo' => [ '@attributes' => [ 'bar' => 'baz' ], 'value' => 'tab' ] ];
上面的数据结构将转储以下 XML 字符串
<foo bar="baz"><value>tab</value></foo>
但是,如果您需要将值节点作为父节点的实际值,则可以使用 Writer::useKeyAsValue(string $key)
来实现这一点
<?php $writer->useKeyAsValue('value'); $writer->dump($data);
现在转储
<foo bar="baz">tab</foo>
写入索引数组结构
索引数组将创建如下所示的 XML 结构
$data = ['data' => [1, 2, 3]]; $writer->dump($data);
<data> <item>1</item> <item>2</item> <item>3</item> </data>
您可以使用 useKeyAsIndex(string $key)
方法更改与索引项相关联的节点名称。
$writer->useKeyAsIndex('thing'); $writer->dump($data);
<data> <thing>1</thing> <thing>2</thing> <thing>3</thing> </data>
写入具有无效索引键的数组
包含无效索引(例如,无序列表)的数组将被稍微不同地处理。
$data = ['data' => [1 => 'foo', 4 => 'bar', 3 => 'baz']]; $writer->dump($data);
<data> <item index="1">foo</item> <item index="4">bar</item> <item index="3">baz</item> </data>