У меня есть файл HTML с дорожками в списке. Я хочу создать объект PHP для каждого трека и сохранить все объекты в PHP-массиве.Как я могу получить элементы и дочерние элементы из HTML по имени класса с помощью PHP?
HTML DOM в моем файле test.html:
<ul>
<li class="track">
<span id="primary-info">
<span class="interpret">Lorem ipsum</span>
<span class="title">dolor sit amet</span>
</span>
<span class="secondary-info">
<span class="playtime">6:00</span>
<span class="label">consetetur</span>
</span>
</li>
<li class="track">
<span id="primary-info">
<span class="interpret">sed diam</span>
<span class="title">nonumy eirmod</span>
</span>
<span class="secondary-info">
<span class="playtime">7:00</span>
<span class="label">invidunt</span>
</span>
</li>
</ul>
Мой PHP код:
<?php
$lTracklistArr = [];
// get the html
$HTML = file_get_contents("http://localhost/test.html");
// load the dom
$lDoc = new DOMDocument();
$lDoc->loadHTML($HTML);
// create XPath obj
$XPath = new DOMXPath($lDoc);
// get all tracks
$lTracks = $XPath->query("//*[@class='track']");
$i = 0;
while($lTracks->item($i))
{
// How can I get the values from the sub-elements from the DOM?
$lInterpret = $lTracks->item($i)-> ?
$lTitle = $lTracks->item($i)-> ?
$lPlaytime = $lTracks->item($i)-> ?
$lLabel = $lTracks->item($i)-> ?
$lTracklistArr[] = new Track($lInterpret, $lTitle, $lPlaytime, $lLabel);
$i++;
}
// show tracklist
print_r($lTracklistArr);
// PHP class about one track
Class Track
{
var $m_Interpret;
var $m_Title;
var $m_Playtime;
var $m_Label;
public function __construct($pInterpret, $pTitle, $pPlaytime, $pLabel)
{
$m_Interpret = $pInterpret;
$m_Title = $pTitle;
$m_Playtime = $pPlaytime;
$m_Label = $pLabel;
}
}
?>
Это не проблема, чтобы получить треки. Но я не могу получить значения из подэлементов по имени класса.
ПРИМЕЧАНИЕ: порядок DOM в дорожке может измениться. Необходимо получить элементы по имени класса.
Большое спасибо за ваши усилия. DOM из HTML-документа (в моем вопросе я только разместил необходимый html-код). Поэтому вы не можете использовать SimpleXML для этого. Функция 'simplexml_load_string' бросает несколько предупреждений и заканчивается в« Уведомлении: попытка получить свойство не-объекта »при использовании' $ data-> li' в цикле. – Simon
, если вы не можете напрямую получить данные за HTML, вы можете попробовать regex – mmm