使用 PHP 从 HTML 列表生成 XML

Posted

技术标签:

【中文标题】使用 PHP 从 HTML 列表生成 XML【英文标题】:Generating XML from HTML list using PHP 【发布时间】:2011-06-20 08:33:28 【问题描述】:

我想把列表结构转换成html

<ul>
    <li>Section 1</li>
    <li>Section 2
        <ul>
            <li>Section 2.1</li>
            <li>Section 2.2</li>
        </ul>
    </li>
    <li>Section 3</li>
</ul>

像这样进入 XML:

<sections>
    <section>
        <caption>Section 1</caption>
        <level>0</level>
    </section>
    <section>
        <caption>Section 2</caption>
        <level>0</level>
    </section>
    <section>
        <caption>Section 2.1</caption>
        <level>1</level>
    </section>
    <section>
        <caption>Section 2.2</caption>
        <level>1</level>
    </section>
    <section>
        <caption>Section 3</caption>
        <level>0</level>
    </section>
</sections>

我尝试使用 php SimpleXML 读取 html,但是当它在 &lt;li&gt; 标记内遇到 &lt;ul&gt; 标记时似乎有问题。

我想知道是否有人可以建议用 PHP 完成这项工作的最简单方法是什么?

非常感谢大家。

【问题讨论】:

您考虑过使用 XSLT 吗?这正是它的作用。 我认为 SimpleXML 的问题在于 &lt;li&gt;Section 2... 处的文本和其他元素的混合 【参考方案1】:

您总是可以将 HTML 解析为您的 XML 结构。像这样的:

假设您的 HTML 位于名为“sections.html”的页面中。这是您可以做您想做的事情的一种方式:

<?php


  # Create new DOM object
  $domOb = new DOMDocument();

  # Grab your HTML file
  $html = $domOb->loadHTMLFile(sections.html);

  # Remove whitespace
  $domOb->preserveWhiteSpace = false; 

  # Set the container tag
  $container = $domOb->getElementsByTagName('ul'); 

  # Loop through UL values
  foreach ($container as $row) 
   
      # Grab all <li>
      $items = $row->getElementsByTagName('li'); 

      # echo the values  
      echo $items->item(0)->nodeValue.'<br />'; 
      echo $items->item(1)->nodeValue.'<br />'; 
      echo $items->item(2)->nodeValue;

      # You could write to your XML file, store in a string, anything here
     

?>

我没有对此进行测试,但这是一般的想法。

希望这会有所帮助。

【讨论】:

以上是关于使用 PHP 从 HTML 列表生成 XML的主要内容,如果未能解决你的问题,请参考以下文章

从 R 列表生成 xml

生成将使用 XMLWriter 生成目标 XML 的 PHP 代码

使用 PHP + CodeIgniter 从 MySQL 数据库生成无序列表

PHP读取及生成xml文件实测

从 orm.xml Doctrine 生成 php 实体

PHP:从抽象生成代码(xml、json、数据库,...)