如何获取每个cd元素的最后一个child?
How to get the last child of each cd element?
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(价格)的最后一张 child 和倒数第二张 child。
所以第一张CD的结果是:
最后 child(磁盘 3):7.20
&倒数第二个child(磁盘2):9.90
第二张CD的结果是:
最后 child(磁盘 2):12.30
&倒数第二个child(磁盘1):12.90
只需要价格
我可以得到其中一张 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 的最后价格和倒数第二个价格?
您可以创建一个 xpath 表达式,它从 cd 和 returns 中选择最后两个元素。如果你只想要价格,你也可以附加它。
//catalog/cd/disk[position()>last()-2]/price
获取 cd
中以 disk
开头的所有节点的价格 last
和 last -1
个位置
//cd/*[starts-with(name(),'disk')][position() > last()-2]/price
或者如果您需要保留目录:
//catalog/cd/*[starts-with(name(),'disk')][position() > last()-2]/price
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(价格)的最后一张 child 和倒数第二张 child。
所以第一张CD的结果是: 最后 child(磁盘 3):7.20 &倒数第二个child(磁盘2):9.90
第二张CD的结果是: 最后 child(磁盘 2):12.30 &倒数第二个child(磁盘1):12.90
只需要价格
我可以得到其中一张 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 的最后价格和倒数第二个价格?
您可以创建一个 xpath 表达式,它从 cd 和 returns 中选择最后两个元素。如果你只想要价格,你也可以附加它。
//catalog/cd/disk[position()>last()-2]/price
获取 cd
中以 disk
开头的所有节点的价格 last
和 last -1
个位置
//cd/*[starts-with(name(),'disk')][position() > last()-2]/price
或者如果您需要保留目录:
//catalog/cd/*[starts-with(name(),'disk')][position() > last()-2]/price