8fold / php-xml-builder
用于构建XML文档和元素字符串的库。
2.0.0
2022-12-11 03:40 UTC
Requires
- php: ^8.0
Requires (Dev)
- phpstan/phpstan: ^1.9
- phpunit/phpunit: ^9.5
- squizlabs/php_codesniffer: ^3.7
README
XML Builder旨在构建一个字符串
,而不是文档对象模型(DOM)或抽象语法树(AST)。
对于DOM或AST,有其他库和原生实现(例如,PHP:DOM 和 SimpleXML)。
您可以使用XML Builder生成一个字符串,将其传递给PHP:DOM或Simple XML。或者,将字符串用作HTTP响应的主体。
使用Element
类在文档中创建单个节点。
使用Document
类生成doctype声明和根级元素。
安装
composer require 8fold/php-xml-builder
使用
警告:此库的用户负责对内容进行清理。
use Eightfold\XMLBuilder\Document; use Eightfold\XMLBuilder\Element; use Eightfold\XMLBuilder\Cdata; echo Document::create('root', Element::create('child', Element::create('grandchild')->omitEndTag()->props('name Xavier'), Cdata::create('Hello, my name is Xavier!') ) );
输出
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?> <root><child><grandchild name="Xavier"/><![CDATA[Hello, my name is Xavier!]]></child></root>
输出(格式化)
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?> <root> <child> <grandchild name="Xavier"/> <![CDATA[Hello, my name is Xavier!]]> </child> </root>
另外,还有一个简写版本。
简写方法使用PHP的魔法方法__callStatic
。
use Eightfold\XMLBuilder\Document; use Eightfold\XMLBuilder\Element; use Eightfold\XMLBuilder\Cdata; echo Document::root( Element::child( Element::grandchild()->omitEndTag()->props('name Xavier'), Cdata::create('Hello, my name is Xavier!') ) ); // output: Same as previous example.
有可用的注释
use Eightfold\XMLBuilder\Document; use Eightfold\XMLBuilder\Element; use Eightfold\XMLBuilder\Cdata; echo Document::create( 'root', Comment::create('comment'), Element::create('tag')->omitEndTag() );
输出(未格式化)
<?xml version = "1.0" encoding = "UTF-8" standalone = "yes" ?> <root> <!-- comment --> <tag /></root>
兼容性
详情
此库的起源是一个实验,其中PHP被视为一种“纯”编程语言,而不是一种逐渐发展成为语言的模板引擎。
主要的痛点是在减少人为错误风险的同时维护人类可读的XML(制表符和空格)的感觉;特别是,开始和结束标签不匹配。
次要的痛点是PHP:DOM和SimpleXML在生成XML和HTML文档时感觉笨拙。