2017-10-20 187 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 
相关问题