dbrisinajumi / array2xml
数组到XML转换类
This package is auto-updated.
Last update: 2024-09-07 20:49:25 UTC
README
Array2xml 是一个PHP库,可以将数组转换为有效的XML。
基于XMLWriter。
要求
- PHP 5.3+
- XMLWriter
安装
require_once ('/path/to/array2xml.php');
用法(例如:RSS最新新闻)
加载库并设置自定义配置
$array2xml = new Array2xml();
$array2xml->setRootName('rss');
$array2xml->setRootAttrs(array('version' => '2.0'));
$array2xml->setCDataKeys(array('description'));
首先创建一个根元素
$data['channel']['title'] = 'News RSS';
$data['channel']['link'] = 'http://yoursite.com/';
$data['channel']['description'] = 'Amazing RSS News';
$data['channel']['language'] = 'en';
现在循环传递DB查询中的元素
$row = $db->lastNews();
foreach($row as $key => $lastNews)
{
$data['channel'][$key]['item']['title'] = $lastNews->title;
$data['channel'][$key]['item']['link'] = 'http://yoursite.com/news/'.$lastNews->url;
$data['channel'][$key]['item']['description'] = $lastNews->description;
$data['channel'][$key]['item']['pubDate'] = date(DATE_RFC1123, strtotime($lastNews->added));
}
您还可以单独设置元素属性。以下示例向item
节点附加属性AttributeName
$data['channel'][$key]['item']['@attributes'] = array('AttributeName' => $attributeValue);
或者,如果您的节点没有子节点,您可以使用这个
$data['channel]['@attributes'] = array('AttributeName' => $attributeValue);
$data['channel]['@content'] = 'Content of channel node';
这将设置channel
节点的属性和内容。
或者,您可以使用setElementsAttrs()方法
$array2xml->setElementsAttrs( array('ElementName' => array('AttributeName' => $attributeValue) ));
请注意,在这种情况下,所有指定名称的元素都将具有相同的属性名称和值。
如果您需要在某个地方包含原始XML树,请使用$array2xml->setRawKeys(array('elementName'))
标记其元素
最后,将输出数据转换为屏幕
echo $array2xml->convert($data);
配置
您可以使用下面的设置器轻松配置此库以适应您特定的用例。
setVersion(string $version)
设置XML版本头。
setEncoding(string $encoding)
设置XML编码
setRootName(string $rootName)
设置XML根元素名称
setRootAttrs(array $rootAttrs)
设置XML根元素属性
setElementsAttrs(array $attrs)
设置匹配给定名称的每个XML元素的属性。示例参数:['elementName' => ['someAttr' => 'attrValue']]
setCDataKeys(array $elementNames)
标记给定元素为CData类型
setRawKeys(array $elementNames)
标记给定元素为原始类型
setNumericTagPrefix(string $prefix)
设置数字节点的默认前缀
setSkipNumeric(bool $skipNumeric)
开启/关闭跳过数字节点
setEmptyElementSyntax(const)
在某些情况下,您可能想要控制空元素的精确语法。
默认情况下,空或等于null的节点使用自闭合语法(<foo/>
)。
您可以使用Array2xml::EMPTY_FULL
重写此行为,以强制使用闭合标签(<foo></foo>
)。
可用参数为Array2xml::EMPTY_SELF_CLOSING
或Array2xml::EMPTY_FULL
setFilterNumbersInTags(bool|array $data)
从元素名称中删除数字。
可能的参数是
boolean TRUE
从所有元素中删除数字array
包含需要过滤的节点名称。
这是一个简单的解决方案,以便在从数组构建的XML中具有相同名称的元素。
例如,让我们构建一个包含3个image
节点的XML
//list of our images
$images = array('image1.jpg', 'image3.jpg', 'image3.jpg');
// input array
$data = array();
for($i=0;$i<3;$i++){
$data['image'.$i] = $images[$i];
}
$array2xml = new array2xml();
$array2xml->setFilterNumbersInTags(array('image'));
$xml = array2xml->convert($data);
就是这样!现在我们有一个包含3个同名称节点的讨厌的XML。
测试
phpunit Tests/Array2xmlTest.php