thenextcoder / xml-flow
一个简单、快速、轻量级且易于使用的PHP库,用于构建、解析和验证XML文档。
v1.0.2
2024-03-21 13:07 UTC
Requires
- php: ^8.2
Requires (Dev)
- phpunit/phpunit: ^10.5|^11.0
This package is not auto-updated.
Last update: 2024-09-21 13:35:50 UTC
README
XMLFlow是一个简单、快速、轻量级且易于使用的PHP库,用于构建、解析和验证XML文档。它还可以用于构建用于LLM的高度结构化提示。
功能
- 使用
XmlBuilder
编程构建XML文档 - 将任何XML数据解析为PHP数组或对象
- 验证您的XML数据的语法和结构
安装
您可以通过Composer安装XMLFlow
composer require thenextcoder/xml-flow
然后您可以在PHP脚本中像这样导入XMLFlow
use TheNextCoder\XmlFlow\Builder\XmlBuilder;
使用XmlBuilder
示例 1: 创建一个简单的文档
此示例演示了如何使用自定义根元素和几个子元素创建一个简单的XML文档。
use TheNextCoder\XmlFlow\Builder\XmlBuilder; $xmlBuilder = new XmlBuilder('greeting'); $xmlBuilder->addElement('hello', 'World'); $xmlBuilder->addElement('goodbye', 'See you later'); echo $xmlBuilder->getFormattedXml();
输出
<?xml version="1.0" encoding="UTF-8"?> <greeting> <hello>World</hello> <goodbye>See you later</goodbye> </greeting>
示例 2: 带有属性的嵌套元素
此示例显示如何创建具有嵌套元素和属性的XML文档,说明了使用XPath指定父元素。
$xmlBuilder = new XmlBuilder('book', ['isbn' => '000-0-00-000000-0']); $chapter = $xmlBuilder->addElement('chapter', 'Introduction to XML', null, ['number' => '1']); $xmlBuilder->addElement('section', 'Basics of XML', $chapter, ['id' => 'section-1']); echo $xmlBuilder->getFormattedXml();
输出
<book isbn="000-0-00-000000-0"> <chapter number="1">Introduction to XML <section id="section-1">Basics of XML</section> </chapter> </book>
示例 3: 使用XPath添加元素
此示例说明了如何使用XPath向指定的父元素添加元素,这对于更复杂的文档结构非常有用。
$xmlBuilder = new XmlBuilder('library'); $xmlBuilder->addElement('shelf', null, null, ['id' => 'shelf-1']); $xmlBuilder->addElement('book', 'XML for Dummies', '//shelf[@id="shelf-1"]', ['author' => 'John Doe']); echo $xmlBuilder->getFormattedXml();
输出
<library> <shelf id="shelf-1"> <book author="John Doe">XML for Dummies</book> </shelf> </library>
示例 4: 复杂文档创建
此示例创建了一个更复杂的XML文档,展示了类的灵活性。
$xmlBuilder = new XmlBuilder('catalog'); $products = $xmlBuilder->addElement('products'); for ($i = 1; $i <= 3; $i++) { $product = $xmlBuilder->addElement('product', "Product $i", $products); $xmlBuilder->addElement('price', '$' . (10 * $i), $product, ['currency' => 'USD']); } echo $xmlBuilder->getFormattedXml();
输出
<catalog> <products> <product> <price currency="USD">$10</price>Product 1 </product> <product> <price currency="USD">$20</price>Product 2 </product> <product> <price currency="USD">$30</price>Product 3 </product> </products> </catalog>
使用XmlParser
示例 1: 解析XML数据
此示例演示了如何将XML字符串解析为PHP数组。
use TheNextCoder\XmlFlow\Parser\XmlParser; $xmlString = <<<XML <task> <title>Write a documentation</title> <priority>High</priority> <subtasks> <subtask>Outline the main sections and subtopics</subtask> <subtask>Write the introductory overview</subtask> <subtask>Draft the "getting started" or installation guide</subtask> <subtask>Detail the main functionalities and their uses</subtask> <subtask>Explain any advanced features or options</subtask> <subtask>Write troubleshooting tips or FAQs section</subtask> <subtask>Include screenshots, diagrams, or other visual aids</subtask> <subtask>Address any known issues or limitations</subtask> <subtask>Indicate on how users can submit comments or questions</subtask> <subtask>Proofread for clarity, accuracy, and grammar</subtask> <subtask>Solicit feedback from colleagues or beta testers</subtask> <subtask>Make necessary revisions based on feedback</subtask> <subtask>Finalize and publish the documentation</subtask> </subtasks> </task> XML; $parser = new XmlParser(); try { $xml = $parser->parse($xmlString); // Extracting title and priority echo "Task: " . $xml->title . "\n"; echo "Priority: " . $xml->priority . "\n\n"; // Extracting and listing subtasks echo "Subtasks:\n"; foreach ($xml->subtasks->subtask as $subtask) { echo "- " . $subtask . "\n"; } // Optional: Converting to an associative array $arrayRepresentation = $parser->toArray($xml); echo "\nArray Representation:\n"; print_r($arrayRepresentation); } catch (Exception $e) { echo "Error: " . $e->getMessage() . "\n"; }
使用XmlValidator
示例 1: 验证XML数据
此示例演示了如何验证XML字符串的语法和结构。
use TheNextCoder\XmlFlow\Validator\XmlValidator; $xmlContent = '<root><child>Example</child></root>'; // Your XML content here try { XmlValidator::validate($xmlContent); echo "The XML is well-formed."; } catch (Exception $e) { echo "The XML is not well-formed. Errors: " . $e->getMessage(); }
贡献
欢迎贡献!请参阅CONTRIBUTING.md以获取更多详细信息。
许可
XMLFlow是开源软件,许可协议为MIT许可证。