2012-01-26 77 views
0

引进先辈数据我用下面的代码使用XPath提取由XPath查询

$doc = new DOMDocument(); 
$doc->strictErrorChecking = false; 
@$doc->loadHTML($data); 
    $xpath = new DOMXPath($doc); 
//Select the parent node 
$categories =$xpath->query('//span[@class="refinementLink"]/ancestor::a/li/ul'); 
$abcd=array(); 
var_dump($categories); 
foreach ($categories as $category) { 


    $abcd[]=$category->nodeValue; 
     print_r('<br/>'.$abcd); 
    // Crafts, Hobbies & Home (19) 
}` //var_dump($abcd); 

现在,这段代码做什么?它选择一个范围标记,跨度标签的DOM列表

UL - 李(4) - A(2) - 跨度(3)

输出是

对象(的DOMNodeList)[3]

它看起来像我在做的事没关系,有我的HTML文档中3个span标签, 我需要的是,我怎么能得到这些跨度的文本标签?我需要跨度标签 之间的任何帮助?

回答

1

->textContent

foreach ($categories as $category) { 
    $abcd[]=$category->textContent; 
} 
var_dump($abcd); 
+0

抱歉无法理解,看起来像,我必须记住整个列表,同时解决这个问题 –

+0

这是你想要的财产......我有点懒惰,我会添加一点;)无需记住列表(我也没有),但是如果你想要一个属性和优秀的php文档一起工作的话,通读所有你手边的对象的文档。 – Wrikken

+0

$ abcd [] = $ category-> nodeValue-> textcontent;和$ abcd [] = $ category-> textcontent;我尝试了这些替换,但仍然是相同的输出 –

0

我想你大概可以拉动@attribute在一开始的时候你做的XPath查询。 XPath中的谓词处理您的foreach。

我使用Oxygen IDE中的XML开发人员,它很好地展示了XPath解析XML的方式,因此您可以更加确定期望的内容。

//span/@text[../@class="refinementLink"]/ancestor::a/li/ul 我不知道,如果文字是你的目标文本的属性,但在XPath中,任何权利之前[ ]是关于你想要选择的。你选择它作为节点,所以你必须在那里做额外的工作。如果你取出一串字符串,你可能会得到其他的东西。我从来没有尝试过,只是提供一个替代思想。