pdeans/ xml-builder
一个简单轻量级的库,使生成XML变得轻松。
Requires
- php: >=5.3.3
- ext-xmlwriter: *
This package is auto-updated.
Last update: 2024-09-03 23:28:21 UTC
README
一个简单轻量级的库,使生成XML变得轻松。
安装
通过Composer安装。
$ composer require pdeans/xml-builder
用法
XML构建库扩展了PHP的XMLWriter扩展。所有XMLWriter面向对象API属性和方法都对每个XML构建实例可用。
首先,实例化一个新的XML构建类对象
use pdeans\Builders\XmlBuilder; $bulder = new XmlBuilder;
使用create
方法来生成一个xml标签。create
方法将根元素名称作为第一个参数,将包含用于构建根属性元素和/或子元素的关联数组作为第二个参数。
以下是一个简单的例子
$xml = $builder->create('Category_Add', [ '@tags' => [ 'Code' => 'Tools', 'Name' => $builder->cdata('Class Tools and Skill Kits'), ], ]);
这将生成以下xml
<Category_Add> <Code>Tools</Code> <Name><![CDATA[Class Tools and Skill Kits]]></Name> </Category_Add>
父/子元素
注意上述示例中@tags
数组下的键值如何工作。键代表xml元素名称,值代表xml元素值。子标签也可以按照此模式嵌套,父元素由数组键表示,数组值由子元素的键值对组成的数组。
元素值助手
可以使用cdata
助手方法将元素值包装在<![CDATA[]]>
标签中,而可以使用decimal
助手方法将十进制数格式化为标准十进制格式,默认情况下四舍五入到两位小数并删除逗号。decimal
助手方法接受一个可选的第二个参数来设置精度。
// Output: <![CDATA[Class Tools and Skill Kits]]> echo $builder->cdata('Class Tools and Skill Kits'); // Output: 49.00 echo $builder->decimal(49.0000000); // Output: 49.001 echo $builder->decimal(49.0005, 3);
保留键
@tags
键代表xml构建器使用的3个保留键之一(每个都包含快捷键对应项)之一,用于解析和生成xml。保留键如下
@attributes
键
快捷键:@a
@attributes
键用于创建xml元素属性。@a
键也支持作为@attributes
键的快捷键。
示例
$xml = $builder->create('CategoryProduct_Assign', [ '@attributes' => [ 'category_code' => 'Food', 'product_code' => 'ale-gallon', ], ]); $xml = $builder->create('CategoryProduct_Assign', [ '@a' => [ 'category_code' => 'Food', 'product_code' => 'ale-gallon', ], ]);
生成的XML
<CategoryProduct_Assign category_code="Food" product_code="ale-gallon"/>
@tags
键
快捷键:@t
@tags
键接受一个关联数组,其中包含构建根元素子元素所需的数据。@t
键也支持作为@tags
键的快捷键。
示例
$xml = $builder->create('ProductAttribute_Add', [ '@a' => [ 'product_code' => 'chest', ], '@tags' => [ 'Code' => 'lock', 'Type' => 'select', 'Prompt' => $builder->cdata('Lock'), ], ]); $xml = $builder->create('ProductAttribute_Add', [ '@a' => [ 'product_code' => 'chest', ], '@t' => [ 'Code' => 'lock', 'Type' => 'select', 'Prompt' => $builder->cdata('Lock'), ], ]);
生成的XML
<ProductAttribute_Add product_code="chest"> <Code>lock</Code> <Type>select</Type> <Prompt><![CDATA[Lock]]></Prompt> </ProductAttribute_Add>
@value
键
快捷键:@v
@value
键明确设置xml元素值。通常,这仅在需要设置属性和值的xml元素上才需要。@v
键也支持作为@value
键的快捷键。
示例
$xml = $builder->create('Module', [ '@attributes' => [ 'code' => 'customfields', 'feature' => 'fields_prod', ], '@tags' => [ 'ProductField_Value' => [ '@attributes' => [ 'product' => 'chest', 'field' => 'armor_type', ], '@value' => 'wood', ], ], ]); $xml = $builder->create('Module', [ '@a' => [ 'code' => 'customfields', 'feature' => 'fields_prod', ], '@t' => [ 'ProductField_Value' => [ '@a' => [ 'product' => 'chest', 'field' => 'armor_type', ], '@v' => 'wood', ], ], ]);
生成的XML
<Module code="customfields" feature="fields_prod"> <ProductField_Value product="chest" field="armor_type">wood</ProductField_Value> </Module>
请注意,@tags
键仅在标签数据的关联数组的第一级上使用,因为它表示子标签数据,而其他两个保留键可以在关联数组的任何子级别上使用。
重复标签
有时在xml中使用重复标签,这不与关联数组键值对很好地配合。为了解决这个问题,仍然将元素名称作为数组键传递,但是数组值由包含标签数据的数组组成的数组。
$xml = $builder->create('Order_Add', [ '@t' => [ 'Charges' => [ 'Charge' => [ [ 'Type' => 'SHIPPING', 'Description' => 'Shipping: UPS Ground', 'Amount' => 5.95 ], [ 'Type' => 'TAX', 'Description' => 'Sales Tax', 'Amount' => 2.15 ], ], ], ], ]);
生成的XML
<Order_Add> <Charges> <Charge> <Type>SHIPPING</Type> <Description>Shipping: UPS Ground</Description> <Amount>5.95</Amount> </Charge> <Charge> <Type>TAX</Type> <Description>Sales Tax</Description> <Amount>2.15</Amount> </Charge> </Charges> </Order_Add>
自闭合标签
要生成一个没有属性的自动闭合元素,请将数组值传递为空值(null)。
$xml = $builder->create('Order_Add', [ '@t' => [ 'TriggerFulfillmentModules' => null, ], ]);
生成的XML
<Order_Add> <TriggerFulfillmentModules /> </Order_Add>