selene/xml

此软件包已被废弃,不再维护。作者建议使用lucid/xml软件包代替。

selene xml 工具

dev-development 2014-09-16 14:23 UTC

This package is not auto-updated.

Last update: 2015-12-05 10:10:33 UTC


README

Build Status Latest Stable Version Latest Unstable Version License HHVM Status

Coverage Status Code Climate

安装

在您的composer.json

{
    "require": {
        "php": ">=5.4.0",
        "selene/xml": "dev-development"
    }
}

运行composer installcomposer update

$ composer install --dev

测试

使用以下命令运行测试

$ vendor/bin/phpunit

解析器

Parser类可以将xml字符串、文件、DOMDocuments和DOMElements解析为PHP数组。

解析xml字符串

<?php

use \Selene\Components\Xml\Parser;

$parser = new Parser;

$parser->parse('<data><foo>bar</foo></data>');

解析xml文件

<?php

use \Selene\Components\Xml\Parser;

$parser = new Parser;

$parser->parse('/path/to/data.xml');

解析DOMDocument

<?php

use \Selene\Components\Xml\Parser;

$parser = new Parser;

$parser->parseDom($dom);

解析DOMElement

<?php

use \Selene\Components\Xml\Parser;

$parser = new Parser;

$parser->parseDomElement($element);

解析器选项

合并属性

<?php

use \Selene\Components\Xml\Parser;

$parser = new Parser;

$parser->setMergeAttributes(true);

键归一化

您可以通过设置键归一化回调来指定如何转换键。

默认归一化将破折号转换为下划线,并将驼峰式转换为蛇形表示法。

<?php

use \Selene\Components\Xml\Parser;

$parser = new Parser;

$parser->setKeyNormalizer(function ($key) {
    // do string transfomations
    return $key;
});

$parser->parseDomElement($element);

设置属性键

如果禁用了属性合并,请使用此选项更改默认属性键(默认为@attributes)。

<?php

use \Selene\Components\Xml\Parser;

$parser = new Parser;

$parser->setAttributesKey('@attrs');

设置索引键

这将强制解析器将具有给定键的nodeName节点视为列表。

<?php

use \Selene\Components\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 \Selene\Components\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

注意:这将创建一个Selene\Components\Xml\Dom\DOMDocument实例。

<?php

use \Selene\Components\Xml\Writer;

$writer = new Writer;

$data = [
    'foo' => 'bar'
];

$dom = $writer->writeToDom($data);

写入器选项

设置归一化器实例

通常,在实例化新的Writer时,会为您设置NormalierInterface实现,但是您可以设置自己的归一化器实例。

注意:归一化器必须实现Selene\Components\Xml\Normalizer\NormalierInterface接口。

<?php

use \Selene\Components\Xml\Writer;
use \Selene\Components\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)添加更多映射属性。