我有一個列表中的軌道的HTML文件。我想爲每個軌道創建一個PHP對象並將所有對象保存到PHP數組中。如何使用PHP通過類名從HTML獲取元素和子元素?
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後面的數據,你可以試試正則表達式 – mmm