【问题标题】:how to separate selected tags from html content如何将选定的标签与 html 内容分开
【发布时间】:2016-11-13 12:52:17
【问题描述】:

我有一个类似的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 ....,现在无论我选择什么标签,比如

    xyz

    。它会给我“xyz”。如果我选择

    pqr

    。它会给我“pqr”。
  • Regex 不适合解析 html。 This question 例如通过 getElementsByTagName() 从 html 文档中获取这些标签。
  • 如果我想要第二个“p”标签的内容,那么它会给我“1062 Caracas”
  • 你想要完成什么?然后,您可以决定是 PHP 还是 JavaScript 合适...

标签: php regex preg-match preg-match-all strip-tags


【解决方案1】:

正如其他人提到的,请改用解析器。
以下 sn-p 将您的 HTML 加载到 DOM 并对其应用 xpath 查询。显然,这些需要稍作调整,但要打印出“Dr. 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;
}
?>

a demo on 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>

问题是,&lt;h1&gt; 后面没有空格,所以表达式会失败。

【讨论】:

  • html 的内容已经来自使用 xpath 的抓取。我需要做的是将每个 html 标签与抓取的数据分开。
  • 我认为我的问题并不太难,它可能只是一个技巧,我只需要来自html的

    xyz

    之类的标签。
猜你喜欢
  • 1970-01-01
  • 2011-08-23
  • 2015-09-15
  • 2021-06-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-14
  • 2010-09-07
相关资源
最近更新 更多