thapp / xmlbuilder
Xmlbuilder 工具
v0.1.4
2013-10-15 17:50 UTC
Requires
- php: >=5.3.7
Requires (Dev)
- mockery/mockery: dev-master
This package is not auto-updated.
Last update: 2024-09-23 14:27:47 UTC
README
此仓库不再维护。
项目已迁移至 此处
xml 构建工具
从数组或对象构建 xml 结构,将 xml 结构转换为数组数据结构。
安装
使用 composer
将 thapp\xmlbuilder
添加到您的 composer.json 文件中。
"require": { "php":">=5.3.7" "thapp/xmlbuilder": "v0.1.*" }
运行 composer update
或 composer install
(如果这是一个干净的 composer 项目)
使用方法
从数组创建 xml
<?php use Thapp\XmlBuilder\XmlBuilder; use Thapp\XmlBuilder\Normalizer; $data = array( 'foo' => 'bar', 'node' => array( '@attributes' => array( 'date' => '2013-06-06' ), 'some string' ); ); $xmlBuilder = new XmlBuilder('data'); $xmlBuilder->load($data); // createXML accepts a boolean value weather to return a string or a DOMDocument // Set it to `false` if you want to retreive a DOMDocument instead. echo $xmlBuilder->createXML(true);
打印
<data> <foo>bar</foo> <node date="2013-06-06">some string</node> </data>
XmlBuilder 默认会根据键名是否以 '@' 开头自动在 dom 节点创建属性,然而 @attributes
预期的是一个键值对数组,而像 @key
这样的键只会接受标量值(字符串、整数、浮点数或布尔值)。
将键映射为属性
$data = array('id' => 12, 'bar' => 'baz'); $xmlBuilder = new XmlBuilder('response'); $XmlBuilder->load($data); $XmlBuilder->setAttributeMapp(array('response' => array('id'))); echo $XmlBuilder->createXML();
打印
<response id="12"> <bar>baz</bar> </response>
从对象创建 xml
<?php class DataObject { protected $foo = 'bar'; public $bar = 'baz'; public function getFoo() { return $this->foo; } }
XmlBuilder 的正常化对象了解对象的 getter 方法
$object = new DataObject('data'); $xmlBuilder->load($object); echo $xmlBuilder->createXML(true);
打印
<data> <foo>bar</foo> <bar>baz</bar> </data>
单一化子名称
<?php //... $xmlBuilder->setSingularizer(function ($name) { if ('entries' === $name) { return 'entry'; } return $name; }); $entries = array( 'entries' => array( 'foo', 'bar', 'baz', ) ); $xmlBuilder->load($entries); echo $xmlBuilder->createXML();
打印
<data> <entries> <entry>foo</entry> <entry>bar</entry> <entry>baz</entry> </entries> </data>
加载 xml 字符串和文件
XmlBuilder 允许您轻松地加载 xml 字符串或文件。The loadXML
方法接受 3 个参数
- (string)xml:xml 源。可以是 xml 字符串或文件名
- (bool)sourceIsString:xml 源是 xml 字符串还是文件
- (bool)simpleXml:返回
\Thapp\XmlBuilder\Dom\SimpleXMLElement
实例而不是\Thapp\XmlBuilder\Dom\DOMDocument
<?php // ... $xml = $xmlBuilder->loadXML('myxmlfile.xml', false); // or $xml = $xmlBuilder->loadXML('<data><foo></foo></data>', true);
转换为数组
<?php // ... $xml = $xmlBuilder->loadXML('<data><foo>bar</foo></data>', true); $array = $xmlBuilder->toArray($xml); // array('data' => array('foo' => 'bar'));
结果
<?php //... array( 'data' => array( 'foo' => 'bar' ) );
数组转换也了解单复数。就像 setSingularizer
方法一样,您可以调用 setPluralizer
<?php //... $xmlBuilder->setPluralizer(function ($name) { if ('entry' === $name) { return 'entries'; } });
给定一个如下的 xml 结构
<data> <entries> <entry>foo</entry> <entry>bar</entry> </entries> </data>
没有设置复数化器时的结果数组将看起来像这样
<?php // ... array( 'data' => array('entries' => array( 'entry' => array('foo', 'bar') )) );
有复数化器
<?php // ... array( 'data' => array( 'entries' => array('foo', 'bar') ) );
文档将很快更新。