Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/89.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何解析html并从dt/dd创建数组_Php_Html_Parsing - Fatal编程技术网

Php 如何解析html并从dt/dd创建数组

Php 如何解析html并从dt/dd创建数组,php,html,parsing,Php,Html,Parsing,我有一个select元素,我想使用来自另一个网站的信息为其动态创建选项值。有关资料可浏览网页。它是“基类”列表。我尝试过使用DOMDocument类,但是我看不到任何使用url代替html文件的方法。我曾尝试使用file_get_html和foreach循环,但无法使其与网站上的数据格式兼容。它位于dt/dd元素中,元素没有id。从网站上获取信息并为我的select元素中的每个类创建选项值的最佳方法是什么 我通常使用它来测试查询。你最终会得到这样的结果 <?php $url = 'ht

我有一个select元素,我想使用来自另一个网站的信息为其动态创建选项值。有关资料可浏览网页。它是“基类”列表。我尝试过使用DOMDocument类,但是我看不到任何使用url代替html文件的方法。我曾尝试使用file_get_html和foreach循环,但无法使其与网站上的数据格式兼容。它位于dt/dd元素中,元素没有id。从网站上获取信息并为我的select元素中的每个类创建选项值的最佳方法是什么

我通常使用它来测试查询。你最终会得到这样的结果

<?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>";
}

?>


使用XPath。我刚刚在Firebug中测试了这个JavaScript代码,它返回了基类的文本数组:
$x('//big[text()=“base classes”]/../../..//a/text()').map(函数(节点){return node.textContent;})
。您应该能够在PHP中使用相同的XPath表达式。非常感谢您!我一直在尝试对您的代码片段进行反向工程,我想我已经解决了所有问题,除了“/....”之外。根据我读到的和你的评论,/。。获取当前节点的父节点。如果查询的“//big…”部分选择了文本为“基类”的所有元素,为什么我们需要父节点?此外,为什么我们需要该父节点的父节点?还是我把它倒过来了?“/…”是否从右向左运行,这样我们就从“/a”开始,得到该节点()的父节点,以及该节点()的父节点?此外,代码不工作,我认为这是因为它不识别DOMDocument类。在index.php文件中,变量“$dom”高亮显示,提示建议创建DOMDocument类。我将Netbeans 8.0.2与XAMPP和PHP5.5.24一起使用。在phpinfo()部分中,Libxml处于活动状态并已启用,而DOM/XML处于启用状态。在php.ini文件中,我有扩展名\u dir=“C:\php\ext”。我看过一些论坛讨论php xml模块和dom扩展,但我不知道如何实现它。