thenextcoder/xml-flow

一个简单、快速、轻量级且易于使用的PHP库,用于构建、解析和验证XML文档。

v1.0.2 2024-03-21 13:07 UTC

This package is not auto-updated.

Last update: 2024-09-21 13:35:50 UTC


README

License

XMLFlow是一个简单、快速、轻量级且易于使用的PHP库,用于构建、解析和验证XML文档。它还可以用于构建用于LLM的高度结构化提示。

功能

  1. 使用XmlBuilder编程构建XML文档
  2. 将任何XML数据解析为PHP数组或对象
  3. 验证您的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许可证