我有一个类似
的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');
}
但它无法正常工作,
我该怎么做。
答案 0 :(得分:1)
正如其他人所提到的,改为使用解析器
以下代码段会将HTML
加载到DOM
并在其上应用xpath查询。显然,这些需要稍微调整,但打印出“Maria Steffens博士”,以下作品:
<?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;
}
?>
<小时/>
至于你原来的问题,为什么它不起作用,让我们把你的表达分解成它的部分:
<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>
问题是,{em>在<h1
和>
之后没有空白,因此表达式将失败。