jeidison / paxb
PHP XML 绑定
0.0.2
2023-08-29 14:23 UTC
Requires
- php: >=8.0
- ext-dom: *
- ext-simplexml: *
Requires (Dev)
- phpunit/phpunit: 9.5.9
- symfony/var-dumper: ^5.3
README
介绍
PAXB 提供了一种快速便捷的方式,可以从 PHP 对象生成 XML 并将 XML 读取到对象中。它支持一种绑定结构,该结构使用 PHP 8 中的 属性 将 XML 元素和属性映射到 PHP 属性。
要求
- PHP 8.0+
- dom 扩展
安装
composer require jeidison/paxb
支持的属性
- #[XmlAttribute]
- #[XmlElement]
- #[XmlRootElement]
- #[XmlTransient]
- #[XmlValue]
- #[XmlType]
- #[XmlPhpTypeAdapter]
适配器
在处理需要在生成 XML 之前修改值的类型时,我们可以编写一个适配器来指示 PAXB 如何管理特定类型的值。
适配器示例
<?php ... class DateBrAdapter implements XmlAdapter { public function marshal(mixed $object): mixed { return $object->format('d/m/Y'); } public function unmarshal(mixed $object): mixed { return DateTime::createFromFormat('d/m/Y', $object) ->setTime(null, null, null); } }
属性使用示例
<?php ... #[XmlType(propOrder: ["number", "street", "fullAddress"])] class Address { #[XmlTransient] private string $fullAddress; #[XmlElement("street")] private string $address; #[XmlElement] private string $number; . . . class Author { #[XmlElement] private string $name; #[XmlElement] private ?string $birthday = null; #[XmlElement] private ?string $email = null; private ?Address $address = null; . . . #[XmlRootElement("livros")] class Book { #[XmlAttribute("identificador")] private int $id; #[XmlElement("nome")] private String $name; #[XmlPhpTypeAdapter(DateBrAdapter::class)] private DateTime $data; /**@var array<Author> */ #[XmlElement("authors")] private array $authors; ...
生成 XML
<?php ... $address = new Address(); $address->setAddress("Rua 10"); $address->setNumber("123"); $address->setFullAddress("123"); $author = new Author(); $author->setName("Jeidison Farias"); $author->setBirthday(""); $author->setEmail(""); $author->setAddress($address); $book = new Book(); $book->setId(1); $book->setName("PHP XML Binding"); $book->setAuthors([$author]); $book->setData(new DateTime()); $book->setAddress($address) $paxb = PAXB::createMarshaller(); $xml = $paxb->marshal($book); echo $xml; ...
生成的 XML 示例
<?xml version="1.0" encoding="UTF-8"?> <livros identificador="1"> <nome>PHP XML Binding</nome> <date>10/09/2021</date> <authors> <name>Jeidison Farias</name> <address> <number>123</number> <street>Rua 10</street> </address> </authors> </livros>
将 XML 转换为 PHP 对象
<?php ... $xml = 'O seu XML'; $unmarshaller = PAXB::createUnmarshal(Book::class); $book = $unmarshaller->unmarshal($xml);
将 XSD 转换为 PHP 类 [进行中]
<?php ... $parameter = new Xsd2PhpParameter; $parameter->pathRootXsd = ''; $parameter->withSetters = true; $parameter->withGetters = true; $parameter->namespace = ''; $parameter->pathStoreClasses = ''; Xsd2Php::instance()->convert($parameter);
该项目灵感来源于 Java 语言中的 JAXB。
作者
许可
MIT 许可证 (MIT)。请参阅 许可文件 了解更多信息。