PHP SimpleXML.如何获得最后一项?

rg8*_*g88 1 php xml simplexml

如何在simplexml对象中获取最后一项(或任何特定项目)?假设您不知道将有多少个节点.

恩.

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="/xsl.xml"?>
<obj 
  href="http://xml.foo.com/" 
  display="com.foo.bar" 
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
  xmlns="http://obix.org/ns/schema/1.0" 
>
 <list name="data" of="HistoryRecord">
  <obj>
   <abstime name="timestamp" val="1876-11-10T00:00:00-08:00"></abstime>
   <int name="energy_in_kwh" val="1234"></int>
   <int name="energy_out_kwh" val="123456"></int>
  </obj>
  <obj>
   <abstime name="timestamp" val="1876-11-10T00:15:00-08:00"></abstime>
   <int name="energy_in_kwh" val="1335"></int>
   <int name="energy_out_kwh" val="443321"></int>
  </obj>
 </list>
 <int name="count" val="2"></int>
</obj>
Run Code Online (Sandbox Code Playgroud)

我想抓住最后<obj></obj>一块(或者甚至只是它的一部分).

Tom*_*lak 5

使用XPath的last()函数,它解决了这个问题:

<?php 
$xml = simplexml_load_file('HistoryRecord.xml'); 
$xml->registerXPathNamespace('o', 'http://obix.org/ns/schema/1.0');

$xpath = "/o:obj/o:list/o:obj[last()]/o:int[@name = 'energy_in_kwh']";
$last_kwh = $xml->xpath($xpath); 
?> 
Run Code Online (Sandbox Code Playgroud)

在这里,它寻找最后的内部<obj>,其中<int>的名称为"energy_in_kwh".

注意命名空间注册.(所有元素都是"http://obix.org/ns/schema/1.0"命名空间的一部分,XPath查询必须反映出来.


编辑:注意[last()]相当于[position() = last()].