簡體   English   中英

需要幫助來訪問PHP DOM元素

[英]Need help accessing PHP DOM elements

大家好,我嘗試從以下HTML結構中提取信息:

// Product 1
<div class="productName">
 <span id="product-name-1">Product Name 1</span>
</div>

<div class="productDetail">            
 <span class="warehouse">Warehouse 1, ACT</span>                
 <span class="quantityInStock">25</span>
</div>

// Product 2
<div class="productName">
 <span id="product-name-2">Product Name 2</span>
</div>

<div class="productDetail">            
 <span class="warehouse">Warehouse 2, ACT</span>                
 <span class="quantityInStock">25</span>
</div>

…

// Product X
<div class="productName">
 <span id="product-name-X">Product Name X</span>
</div>

<div class="productDetail">            
 <span class="warehouse">Warehouse X, ACT</span>                
 <span class="quantityInStock">25</span>
</div>

我沒有源html的控制,並且您將看到productName及其隨附的productDetail不在公共元素內。

現在,我正在使用以下php代碼嘗試解析該頁面。

$html = new DOMDocument();
$html->loadHtmlFile('product_test.html');

$xPath = new DOMXPath($html);

$domQuery = '//div[@class="productName"]|//div[@class="productDetail"]';

$entries = $xPath->query($domQuery);

foreach ($entries as $entry) { 
 echo "Detail: " . $entry->nodeValue) . "<br />\n";
}

打印以下內容:

Detail: Product Name 1
Detail: Warehouse 1, ACT
Detail: 25
Detail: Product Name 2
Detail: Warehouse 2, ACT
Detail: 25
Detail: Product Name X
Detail: Warehouse X, ACT
Detail: 25

現在,這接近我想要的。 但是我需要對每種產品,倉庫和數量庫存進行一些處理,無法弄清楚如何將其解析為單獨的產品組。 我追求的最終輸出是這樣的:

Product 1:
Name: Product Name 1
Warehouse: Warehouse 1, ACT
Stock: 25

Product 2:
Name: Product Name 2
Warehouse: Warehouse 2, ACT
Stock: 25 

我不能僅僅弄清楚它,而且我不能把這個DOM的東西包住頭,因為這些元素與標准數組不能完全一樣地工作。

如果有人可以提供幫助或為我指明正確的方向,我將不勝感激。

也許不是最有效的方法,但是

$html = new DOMDocument();
$html->loadHtmlFile('test2.php');

$xPath = new DOMXPath($html);

foreach( $xPath->query('//div[@class="productName"]') as $prodName ) { 
  $prodDetail = $xPath->query('following-sibling::div[@class="productDetail"][1]', $prodName);
  // <-- todo: test if there is one item here -->
  $prodDetail = $prodDetail->item(0);
  echo "Name: " . $prodName->nodeValue . "<br />\n";
  echo "Detail: " . $prodDetail->nodeValue . "<br />\n";
  echo "----\n";
}

版畫

Name: 
 Product Name 1
<br />
Detail:             
 Warehouse 1, ACT                
 25
<br />
----
Name: 
 Product Name 2
<br />
Detail:             
 Warehouse 2, ACT                
 25
<br />
----
Name: 
 Product Name X
<br />
Detail:             
 Warehouse X, ACT                
 25
<br />
----

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM