1

在 php 中,我想打开一个 html 文件,删除 div(class Areas) 的内容并保存。

$dom = new DOMDocument;
$dom->loadHTMLFile( "temp/page".$y.".xhtml" );
$xpath = new DOMXPath( $dom );
$pDivs = $xpath->query(".//div[@class='Areas']");
foreach ( $pDivs as $div ) {
  $div->parentNode->removeChild( $div );
}
echo htmlspecialchars($dom->saveHTMLFile());

它不起作用...

我的 html 文件看起来:

<html>
 <head>
  <title></title>
  <link href="css.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
   <div style="height:998px;">
    <img src="images/bg004.jpg" />
     <div class="class1">
         <div class="class2"></div>
         <div class="class2"></div>
    </div>
    <div class="Areas">
         <div class="Area"><a href="index.html"></a></div>
         <div class="Area"><a href="index.html"></a></div>
         <div class="Area"><a href="index.html"></a></div>
    </div>
   </div>
  </body>
</html>

我想要这个结果:

<html>
 <head>
  <title></title>
  <link href="css.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
   <div style="height:998px;">
    <img src="images/bg004.jpg" />
     <div class="class1">
         <div class="class2"></div>
         <div class="class2"></div>
    </div>
    <div class="Areas">

    </div>
   </div>
  </body>
</html>

感谢您的帮助

更新

如何做同样的事情,但我的文件现在是 xml ?

我对此进行测试:

    copy("temp/page".$y.".xhtml", "/temp/page".$y.".xml");
$dom = new DOMDocument;
$dom->load( "temp/page".$y.".xml" );
$xpath = new DOMXPath( $dom );
$pDivs = $xpath->query(".//div[@class='Area']");
foreach ( $pDivs as $div ) {
    $div->parentNode->removeChild( $div );
}
$dom->savexml();

我现在有

<?xml version="1.0" encoding="utf-8"?>
<html>
 <head>
  <title></title>
  <link href="css.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
   <div style="height:998px;">
    <img src="images/bg004.jpg" />
     <div class="class1">
         <div class="class2"></div>
         <div class="class2"></div>
    </div>
    <div class="Areas">
         <div class="Area"><a href="index.html"></a></div>
         <div class="Area"><a href="index.html"></a></div>
         <div class="Area"><a href="index.html"></a></div>
    </div>
   </div>
  </body>
</html>
4

3 回答 3

5

你就快到了。您只需要更改AreasArea然后使用saveHtmlFile而不是saveHTML

$dom = new DOMDocument;
$dom->loadHTMLFile( "temp/page".$y.".xhtml" );
$xpath = new DOMXPath( $dom );
$pDivs = $xpath->query(".//div[@class='Area']");
foreach ( $pDivs as $div ) {
  $div->parentNode->removeChild( $div );
}
$dom->saveHTMLFile("temp/page".$y.".xhtml");

这是假设您要将 HTML 保存回原始文档。请注意 DOMXPath 会在您的文档顶部添加一个文档类型,我认为这可以吗?

于 2012-09-04T08:58:35.830 回答
4

saveHTML只是将 html 输出为字符串,用于saveHTMLFile将其保存为文件。

于 2012-09-04T08:45:11.340 回答
3

您想使用 class 删除 div Area,因此只需更改 XPath 查询:

$pDivs = $xpath->query(".//div[@class='Area']"); // not 'Areas'

当然,您还需要对结果做一些事情,例如:

echo htmlspecialchars($dom->saveHTML()); // prints the result
于 2012-09-04T08:45:59.290 回答