Как сохранить phpdom в xml? - PullRequest
       0

Как сохранить phpdom в xml?

0 голосов
/ 23 декабря 2018

Я использую этот простой php-код для анализа некоторой информации из html

 <?php 
/*** a new dom object ***/ 
$dom = new domDocument; 
$dom->loadHTMLFile('https://www.example.com/prehled.php'); 
/*** load the html into the object ***/ 
$dom->loadHTML($html); 

/*** discard white space ***/ 
$dom->preserveWhiteSpace = false; 

/*** the table by its tag name ***/ 
$tables = $dom->getElementsByTagName('table'); 

/*** get all rows from the table ***/ 
$rows = $tables->item(1)->getElementsByTagName('tr');  

/*** loop over the table rows ***/ 
foreach ($rows as $row) {
/*** get each column by tag name ***/ 
$cols = $row->getElementsByTagName('td'); 


  echo 'lokalita: '.$cols->item(0)->nodeValue.'<br />'; 
  echo 'celkem: '.$cols->item(1)->nodeValue.'<br />'; 
  echo 'druh: '.$cols->item(2)->nodeValue.'<br />'; 
  echo 'novy: '.$cols->item(3)->nodeValue.'<br />'; 
  echo 'provoz: '.$cols->item(4)->nodeValue; 


}


?>

и вот результат: http://pocasi -dnes.cz / test-table.php .

Есть ли способ получить простой вывод XML?Большое спасибо за любую помощь.

Ответы [ 3 ]

0 голосов
/ 23 декабря 2018

Вы используете DOM API для чтения XML.Тот же API можно использовать для создания и изменения документов XML.Создайте узел, используя метод DOMDocument::create*(), и добавьте / вставьте его, используя DOMNode методы, такие как appendChild() или insertBefore().

. В следующих примерах я оптимизировал чтение, используя выражения Xpath.

$html = <<<'HTML'
<table>
  <tr>
    <td>1. lokalita</td>
    <td>2. celkem</td>
  </tr>
</table>
HTML;

// the source HTML document
$source = new \DOMDocument();
// loadHTMLFile() for files / loadHTML() for strings
$source->loadHTML($html);
$xpath = new \DOMXpath($source);

// the new target XML document
$target = new \DOMDocument();
// add a root element
$target->appendChild($target->createElement('data'));

// iterate the table rows in the source
foreach ($xpath->evaluate('//table/tr') as $row) {
    // an element for the group
    $target->documentElement->appendChild(
        $locationNode = $target->createElement('umístění')
    );
    // first table cell
    $locationNode
      ->appendChild($target->createElement('lokalita'))
      ->appendChild($target->createTextNode($xpath->evaluate('string(td[1])', $row)));
    // second table cell
    $locationNode
      ->appendChild($target->createElement('celkem'))
      ->appendChild($target->createTextNode($xpath->evaluate('string(td[2])', $row)));
    // ...   
}

$target->formatOutput = TRUE;
echo $target->saveXML();

Выход:

<?xml version="1.0"?>
<data>
  <umístění> 
    <lokalita>1. lokalita</lokalita>
    <celkem>2. celkem</celkem> 
  </umístění> 
</data>
0 голосов
/ 27 декабря 2018

Спасибо всем за помощь.Я наконец объединяю всю информацию в одно решение.

0 голосов
/ 23 декабря 2018

Не уверен, что вы хотите вывод XML, но при этом ваши данные будут отображаться в виде файла XML

<?php 
/*** a new dom object ***/ 
$dom = new domDocument; 
$dom->loadHTMLFile('https://www.example.com/prehled.php'); 
/*** load the html into the object ***/ 
$dom->loadHTML($html); 

/*** discard white space ***/ 
$dom->preserveWhiteSpace = false; 

/*** the table by its tag name ***/ 
$tables = $dom->getElementsByTagName('table'); 

/*** get all rows from the table ***/ 
$rows = $tables->item(1)->getElementsByTagName('tr');  

/*** loop over the table rows ***/ 


header("Content-type: text/xml");
echo '<?xml version="1.0" encoding="UTF-8"?><data>';

foreach ($rows as $row) {
    echo '<lokalita>'.$cols->item(0)->nodeValue.'</lokalita>'; 
    echo '<celkem>'.$cols->item(1)->nodeValue.'</celkem>'; 
    echo '<druh>'.$cols->item(2)->nodeValue.'</druh>'; 
    echo '<novy>'.$cols->item(3)->nodeValue.'</novy>'; 
    echo '<provoz>'.$cols->item(4)->nodeValue.'</provoz>'; 
}
echo '</data>';

. Вы можете заменить «данные» на все, что захотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...