【问题标题】:Change HTML using Xpath and DomDocument?使用 Xpath 和 DomDocument 更改 HTML?
【发布时间】:2018-12-12 12:50:35
【问题描述】:

我有以下 HTML 源代码:

$content = "<table>

<tr>
  <td>AAA</td>
  <td>30,40 €</td>
  <td>41,10 €</td>
</tr>
<tr>
  <td>BBB</td>
  <td>30,40 €</td>
  <td>41,10 €</td>
</tr>
<tr>
  <td>CCC</td>
  <td>30,40 €</td>
  <td>41,10 €</td>
</tr>
</table>";

我想更新&lt;tr&gt; 中的所有第一个&lt;td&gt;,以在&lt;td&gt; 上添加一个类:

<table>

    <tr>
      <td class='first'>AAA</td>
      <td>30,40 €</td>
      <td>41,10 €</td>
    </tr>
    <tr>
      <td class='first'>BBB</td>
      <td>30,40 €</td>
      <td>41,10 €</td>
    </tr>
    <tr>
      <td class='first'>CCC</td>
      <td>30,40 €</td>
      <td>41,10 €</td>
    </tr>
    </table>

我可以用这个得到我想要的元素:

$dom = new DOMDocument();
@$dom->loadHTML($table);
$xpath = new DOMXPath($content);

foreach($xpath->query('//td[1]') as $td){
    echo $td->nodeValue."\n\n";

}

但是,我不知道如何更改内容以添加我的课程。

你有想法吗?

【问题讨论】:

  • 你试过foreach($xpath-&gt;query('//td[1]') as $td){$td-&gt;setAttribute('class','first');}; echo $dom-&gt;saveHTML(); 吗?
  • 它有效!多谢!

标签: php html xpath domdocument


【解决方案1】:

您可以只使用setAttribute 为您的第一个td 元素添加一个类:

$doc = new DOMDocument();
$doc->loadHTML(mb_convert_encoding($content, 'HTML-ENTITIES', 'UTF-8'), LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
$xpath = new DOMXPath($doc);
foreach ($xpath->query('//td[1]') as $td) {
    $td->setAttribute('class', 'first');
}
echo $doc->saveHTML();

请注意,您需要转换 utf-8,因为 DOMDocument 不能很好地理解它。 DOMXPath 也应该引用 DOMDocument,而不是原始 HTML。

输出

<table>
 <tr>
  <td class="first">AAA</td>
  <td>30,40 &euro;</td>
  <td>41,10 &euro;</td>
 </tr>
 <tr>
  <td class="first">BBB</td>
  <td>30,40 &euro;</td>
  <td>41,10 &euro;</td>
 </tr>
 <tr>
  <td class="first">CCC</td>
  <td>30,40 &euro;</td>
  <td>41,10 &euro;</td>
 </tr> 
</table>

Demo on 3v4l.org

【讨论】:

    猜你喜欢
    • 2012-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-09
    • 2015-02-28
    • 2010-11-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多