thapp/xmlbuilder

Xmlbuilder 工具

v0.1.4 2013-10-15 17:50 UTC

This package is not auto-updated.

Last update: 2024-09-23 14:27:47 UTC


README

此仓库不再维护。
项目已迁移至 此处

xml 构建工具

从数组或对象构建 xml 结构,将 xml 结构转换为数组数据结构。

Build Status

安装

使用 composer

thapp\xmlbuilder 添加到您的 composer.json 文件中。

"require": {
	"php":">=5.3.7"
	"thapp/xmlbuilder": "v0.1.*"
}

运行 composer updatecomposer 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')
	)
);

文档将很快更新。