使用PHP将HTML表转换为XML(DOMDocument?)

时间:2018-10-31 16:19:14

标签: php xml domdocument

我希望将下面的HTML Table标记转换为XML格式。

<table class='tbl-class'>
  <thead>
    <tr>
      <th>Island</th>
      <th>Number of nights</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Guadeloupe</td>
      <td>1</td>
    </tr>
    <tr>
      <td>Antigua</td>
      <td>5</td>
    </tr>
  <tbody>
</table>

理想情况下,我希望XML输出是这样的:

<location>
  <island>Guadeloupe</island>
  <nights>1</nights>
</location>
<location>
  <island>Antigua</island>
  <nights>5</nights>
</location>

我目前正在尝试使用DOMDocument来执行此操作,但是对于将其应用于任何地方却几乎没有经验。到目前为止,我已经完成了以下工作:-我认为我需要在foreach循环中做更多的事情,但不确定是什么。

$doc = new DOMDocument();
$doc->load($convertedString);
$classname = 'tbl-class';
$finder = new DomXPath($doc);
$nodes = $finder->query("//*[contains(@class, '$classname')]");

foreach ($nodes as $node) {
  $node->parentNode->removeChild($node);
}

$convertedString = $doc->saveHTML();

1 个答案:

答案 0 :(得分:1)

我发现使用SimpleXML顾名思义-更简单。这段代码将读取XML,并根据需要-找到<table>元素。

然后使用foreach()来使用SimpleXML的功能将元素层次结构称为对象,因此$table[0]->tbody->tr引用表的<tr>部分中的<tbody>元素。

然后将每个<td>元素与来自$headers的相应标签组合起来...

$xml= simplexml_load_string($convertedString);

$classname = 'tbl-class';
$table = $xml->xpath("//*[contains(@class, '$classname')]");

$headers = ["island", "nights"];
$out = new SimpleXMLElement("<locations />");
foreach ( $table[0]->tbody->tr as $tr ){
    $location = $out->addChild("location");
    $key = 0;
    foreach ( $tr->td as $td )  {
        $location->addChild($headers[$key++], (string)$td);
    }
}

echo $out->asXML();