无法使用PHP dom解析器获取子元素

  • 本文关键字:获取 元素 dom PHP php dom
  • 更新时间 :
  • 英文 :


下面是我的Html

<div class="product4Col">
<div class="fluidprodCol">
<div class="fluid">
<a href="url1">Title 1</a>  
</div>
<div class="fluid">
<div>
<a id="">Add To Bag</a>
</div>
</div>
<div class="fluid productName title">
<a href="url2">Subtitle 1</a>
</div>
<div class="fluid productName price"><label>₹</label>2,999 
</div>
<div class="fluid productName">
<div class="colorSwatch" ></div>
<div class="colorSwatch" ></div>
<div class="colorSwatch" ></div>
</div>
</div>
</div>
<div class="product4Col">
<div class="fluidprodCol">
<div class="fluid">
<a href="url11">Title 2</a>     
</div>
<div class="fluid">
<div>
<a id="">Add To Bag</a>
</div>
</div>
<div class="fluid productName title">
<a href="url22">Subtitle 2</a>
</div>
<div class="fluid productName price"><label>₹</label>2,999 
</div>
<div class="fluid productName">
<div class="colorSwatch" ></div>
<div class="colorSwatch" ></div>
</div>
</div>
</div>

我想得到如下输出

1:url1,标题1,url2,副标题1,3色Swatch

2:url11,标题2,url22,副标题2,2色Swatch

我尝试了下面的代码,但它似乎没有像预期的那样工作,我无法获得2级数据,我想获得url、标题和样本数。需要帮助修复问题

$dataop = file_get_contents('http://localhost/dataimport.html');

$doc = new DOMDocument();
$doc->loadHTML($dataop);
$xpath = new DomXPath($doc);
$nodeList = $xpath->query("//div[@class='product4Col']");
foreach($nodeList as $prg){
echo "<br>------------------<br>";
$nodeListnx = $prg->query("//div[@class='fluidprodCol']");
foreach($nodeListnx as $prgnx){
echo "<p>new</p>";
}
echo "<br>------------------<br>";
}

此代码纠正了第二次使用query()时指出的问题,并使用$prg作为下一次搜索的上下文。但我也在查询的开头添加了.,以确保它只读取该节点的内容。

当它提取该元素内的<a>标签时,它只从第一和第三个链接中提取数据。然后它看起来像colorSwatch分类的元素,不确定你想对它们做什么,所以它只是输出内容。。。

$doc = new DOMDocument();
$doc->loadHTML($dataop);
$xpath = new DomXPath($doc);
$nodeList = $xpath->query("//div[@class='product4Col']");
foreach($nodeList as $prg){
echo "<br>------------------<br>";
$nodeListnx = $xpath->query(".//div[@class='fluidprodCol']//a", $prg);
echo $nodeListnx[0]->attributes['href']->textContent . " " . $nodeListnx[0]->textContent . "<br /";
echo $nodeListnx[2]->attributes['href']->textContent . " " . $nodeListnx[2]->textContent. "<br /";

$colorSwatchs = $xpath->query(".//div[@class='colorSwatch']", $prg);
foreach ( $colorSwatchs as $colorSwatch )   {
echo $colorSwatch->textContent . "<br />";
}
echo "<br>------------------<br>";
}

最新更新