Генерация XML из списка HTML с использованием PHP - PullRequest
4 голосов
/ 03 февраля 2011

Я хотел бы преобразовать структуру списка в 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, но этоКажется, есть проблема, когда он встречает тег <ul> внутри тега <li>.

Интересно, может ли кто-нибудь любезно предложить, как проще всего это сделать в PHP?

Большое спасибо всем вам.

1 Ответ

3 голосов
/ 03 февраля 2011

Вы всегда можете просто проанализировать этот HTML в вашей структуре XML.Примерно так:

Предположим, ваш HTML находится на странице с именем "section.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
    } 

?>

Я не проверял это, но это общая идея.

...