2017-10-20 190 views
1

如何獲取每個cd元素的最後一個孩子?

<?xml version="1.0" encoding="ISO-8859-1"?> 
<catalog> 
    <cd country="USA"> 
     <disk> 
      <title>Empire Burlesque</title> 
      <artist>Bob Dylan</artist> 
      <price>10.90</price> 
     </disk> 
     <disk> 
      <title>Hide your heart</title> 
      <artist>Bonnie Tyler</artist> 
      <price>9.90</price> 
     </disk> 
     <disk> 
      <title>KDGFJDLF</title> 
      <artist>mnxc lxck</artist> 
      <price>7.20</price> 
     </disk> 
    </cd> 
    <cd country="USA"> 
     <disk> 
      <title>Greatest Hits</title> 
      <artist>Dolly Parton</artist> 
      <price>12.90</price> 
     </disk> 
     <disk> 
      <title>ASD</title> 
      <artist>abc def</artist> 
      <price>12.30</price> 
     </disk> 
    </cd> 
</catalog> 

我需要得到每個CD(價格)的最後一個子和2最後一個孩子的XML。

所以第一CD的結果是: 最後一個孩子(磁盤3):7.20 & 2日最後一個孩子(磁盤2):9.90

第二CD的結果是: 最後一個孩子(磁盤2):12.30 & 2日最後一個孩子(磁盤1):12.90

只需要價格

我能得到CD,但IAM無知讓每一個CD的價格之一的價格(如果新一些被添加)。

<?php 
$xml = new DOMDocument(); 
$xml->load(realpath('cd.xml')); 
$xpath = new DOMXPath($xml); 

$asd = $xml ->getElementsByTagName("cd"); 
$qwe = $xpath ->query('//catalog/cd'); 

foreach ($qwe as $qwe) { 
$lastPrice = $xpath->query('//catalog/cd /disk[last()]/price')->item(0)->nodeValue; 
$secondLastPrice = $xPath->query('//catalog/cd /disk[last()-1]/price')->item(0)->nodeValue; 
} 
?> 

我如何繼續從$ qwe。得到每張CD的最後價格和第二最後價格?

回答

1

您可以創建一個xpath表達式,它從cd中選擇最後兩個元素並返回它們。如果你只是想要價格,你也可以追加。

//catalog/cd/disk[position()>last()-2]/price 
+0

作品,直到'cd'只放置'disk#'標籤 –

+0

如果目錄包含不同的內容,則可能是xml設計問題。儘管如此,每個磁盤在foreach中應該有相同的標記 – Philipp

+0

($ qwe爲$ qwe)循環我爲每個循環打印了最後一個價格,但是如何獲得第二個最後的價格現在哈哈。 $ lastP = $ xPath-> query('// customerInfos/customer/meter/meterDate [last()]'); \t foreach($ lastP as $ n){ $ lastPrice = $ n-> nodeValue; } – Marvelo

0

獲取cd即開始disklast所有節點的價格和last -1位置

//cd/*[starts-with(name(),'disk')][position() > last()-2]/price 

,或者如果你需要保留目錄:

//catalog/cd/*[starts-with(name(),'disk')][position() > last()-2]/price 
相關問題