8fold/php-xml-builder

用于构建XML文档和元素字符串的库。

2.0.0 2022-12-11 03:40 UTC

This package is auto-updated.

Last update: 2024-09-24 19:46:17 UTC


README

XML Builder旨在构建一个字符串,而不是文档对象模型(DOM)或抽象语法树(AST)。

对于DOM或AST,有其他库和原生实现(例如,PHP:DOMSimpleXML)。

您可以使用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文档时感觉笨拙。

其他