我有一个像 html
<span class="address">
<h1>Dr. Maria Steffens</h1>
<h4>Institute of Medico</h4>
<h4></h4>
<h4></h4>
<p>Sta. Ana, strt PH-501</p>
<p>1062 Caracas</p>
<p>France</p>
<br>
<p>Telefon: +58-457-2889567</p>
<p><a href="mailto:plasticsurgery@yahoo.com">plasticsurgery@yahoo.com</a></p>
<p><a href="http://">www.mysite.com</a></p>
</span>
现在我想像
<h1>Dr. Maria Steffens</h1>
或发生
<h4></h4> tag
我试过了
$html = new DOMDocument();
@$html->loadHtmlFile('http://www.sitetofetch.com');
$xpath = new DOMXPath( $html );
$nodelist = $xpath->query( "//*[@class='address']" );
foreach ($nodelist as $n){
$newhtml = $html->saveHtml($n)."'n";
$newhtml = htmlentities($newhtml);
$items = $html->getElementsByTagName('h1');
}
但它不能正常工作,
我该怎么做。
正如其他人提到的,请改用解析器。
以下代码片段将HTML
加载到DOM
中,并对其应用 xpath 查询。显然,这些需要稍微调整一下,但要打印出"玛丽亚·斯蒂芬斯博士",以下作品:
<?php
$data = <<<DATA
<span class="address">
<h1>Dr. Maria Steffens</h1>
<h4>Institute of Medico</h4>
<h4></h4>
<h4></h4>
<p>Sta. Ana, strt PH-501</p>
<p>1062 Caracas</p>
<p>France</p>
<br>
<p>Telefon: +58-457-2889567</p>
<p><a href="mailto:plasticsurgery@yahoo.com">plasticsurgery@yahoo.com</a></p>
<p><a href="http://">www.mysite.com</a></p>
</span>
DATA;
$dom = new DOMDocument();
$dom->loadHTML($data);
$xpath = new DOMXPath($dom);
$headers = $xpath->query("//h1");
foreach ($headers as $header) {
echo $header->nodeValue;
}
?>
查看有关 ideone.com 的演示。
至于你最初的问题,为什么它不起作用,让我们把你的表达分成几个部分:
<h1 # match <h1 literally
's # followed by one whitespace character (space, tab, newline)
[^>]* # followed by anything not >, zero or more times
> # followed by >
(.*) # anything in that line afterwards
<'/h1> # followed by </h1>
问题是,<h1
和>
之后没有空格,因此表达式将失败。