2016-07-11 3 views
0

У меня есть HTML каккак отделить выбранные теги содержимого 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:[email protected]">[email protected]</a></p> 
    <p><a href="http://">www.mysite.com</a></p> 
</span> 

Теперь я хочу, чтобы отделить каждую метку, как

<h1>Dr. Maria Steffens</h1> 

или возникновение

<h4></h4> tag 

I попробовал

$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

Можете ли вы описать это немного дальше, что вы хотите достичь? Это пока не очень понятно. –

+0

У меня есть scraped html ...., теперь любой тег, который я выбираю как

xyz

. это даст мне «xyz». и если я выберу

pqr

. это даст мне «pqr». – Adas

+3

Regex не является предпочтительным для разбора html. [Этот вопрос] (http://stackoverflow.com/questions/13458133/php-parse-html-tags), например, получает те теги из html-документа через getElementsByTagName(). – LukStorms

ответ

1

Как уже упоминалось, вместо этого используйте парсер.
Следующий фрагмент загружает ваш HTML в DOM и применяет к нему запросы xpath. Очевидно, что они должны быть переделаны немного, но напечатать «д-р Мария 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:[email protected]">[email protected]</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> 

Проблема, нет пробельного после <h1 и >, так что выражение потерпит неудачу.

+0

. Содержимое html уже приходит из scrape, используя xpath. что мне нужно сделать, это разделить каждый тег html с этими захваченными данными. – Adas

+0

Я думаю, что моя проблема не слишком сложная, ее просто трюк может быть, мне просто нужен тег, такой как

xyz

из html. – Adas

Смежные вопросы