2015-07-03 25 views
-1

我有一個選擇元素,我想使用其他網站的信息動態創建選項值。信息可以在http://www.dandwiki.com/wiki/SRD:Classes看到。這是「基礎班」的列表。我曾嘗試使用DOMDocument類,但我看不到任何使用url而不是html文件的方式。我曾嘗試使用file_get_html和foreach循環,但無法使其與網站上的數據格式一起工作。它位於dt/dd元素中,並且元素沒有id。從網站上獲取信息的最佳方式是什麼,併爲我的select元素中的每個類創建選項值?如何解析html和從dt/dd創建數組

+0

使用XPath。我只是在Firebug中測試了這個JavaScript代碼,它返回了一個基類的文本數組:'$ x('// big [text()=「Base Classes」] /../..// a/text ()')。map(function(node){return node.textContent;})'。您應該能夠在PHP中使用相同的XPath表達式。 – bgoldst

回答

0

我通常使用http://www.bit-101.com/xpath/來測試查詢。你會最終得到這樣的東西。

<?php 

$url = 'http://www.dandwiki.com/wiki/SRD:Classes'; 
$html = file_get_contents($url); 
$dom = new DOMDocument(); 

//from file 
@$dom->loadHTML($html); 

//Creating a new DOMPath 
$Xpath = new DOMXPath($dom); 

// Get links 
// //big Selects all <big> elements in the document. 
// [text()="Base Classes"] with text "base classes" 
// /.. get parent class 
// /.. get parent class 
// //a select all <a> elements 
// /text() get text 
$query = '//big[text()="Base Classes"]/../..//a/text()'; 

$entries = $Xpath->query($query); 

foreach ($entries as $entry) { 

    echo $entry->nodeValue . "<br>"; 
} 

?> 
+0

非常感謝你!我一直在嘗試對你的代碼片段進行反向工程,並且我認爲除了'/../ ..'之外,我已經找到了一切。根據我讀過的內容和你的評論,/ ..獲取當前節點的父節點。如果查詢的'// big ...'部分選擇了所有元素和文本'Base Classes',爲什麼我們需要父節點?此外,爲什麼我們需要該父節點的父節點?或者我有倒退? '/ ..'是否正確地工作,以便我們以'/ a'開始並獲取該節點的父節點(

),以及該節點的父節點(
)? – Duders

+0

此外,代碼不工作,我認爲這是因爲它不識別DOMDocument類。在index.php文件中,變量'$ dom'被加亮,並且提示建議創建DOMDocument類。我在XAMPP和PHP 5.5.24上使用Netbeans 8.0.2。在phpinfo()部分中,Libxml處於活動狀態並且已啓用,並且已啓用DOM/XML。在php.ini文件中,我有extension_dir =「C:\ PHP \ ext」。我見過論壇討論php-xml模塊和dom擴展,但我不知道如何實現它。 – Duders