如何获取每个cd元素的最后一个子元素?

时间:2017-10-20 13:07:26

标签: php xml xpath domdocument domxpath

XML

<?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(价格)的最后一个孩子和第二个孩子。

所以第一张CD的结果是: 最后一个孩子(磁盘3):7.20 &安培;最后一个孩子(第2轮):9.90

第二张CD的结果是: 最后一个孩子(磁盘2):12.30 &安培;第二个孩子(磁盘1):12.90

只需要价格

我可以得到其中一张CD的价格,但是iam无法获得每张CD的价格(如果添加了新的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的最后价格和最后一个价格?

2 个答案:

答案 0 :(得分:1)

您可以创建一个xpath表达式,它从cd中选择最后两个元素并返回它们。如果你只是想要价格,你也可以追加它。

segfault

答案 1 :(得分:0)

获取cd中以disk开头lastlast -1位置的所有节点的价格

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

或者如果您需要保留目录:

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