首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >PHP SimpleXML。如何获得最后一件物品?

PHP SimpleXML。如何获得最后一件物品?
EN

Stack Overflow用户
提问于 2008-11-17 08:47:20
回答 6查看 8.5K关注 0票数 1

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

例如。

代码语言:javascript
运行
复制
<?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>

我想要抓取最后的<obj></obj>块(甚至只是其中的一部分)。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2008-11-17 10:17:53

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

代码语言:javascript
运行
复制
<?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); 
?> 

它在这里查找最后一个内部<obj>,并在其中查找名为"energy_in_kwh"<int>

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

编辑:请注意,[last()]等同于[position() = last()]

票数 5
EN

Stack Overflow用户

发布于 2008-11-17 10:24:09

有一个XPath表达式可以做您想要做的事情:

代码语言:javascript
运行
复制
$xml='<?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>';
$x=simplexml_load_string($xml);
$x->registerXPathNamespace('obix', 'http://obix.org/ns/schema/1.0');
$objects=$x->xpath('/obix:obj/obix:list/obix:obj[last()]');
print_r($objects);

例如,/bookstore/book[last()]将选择作为bookstore元素的子元素的最后一个book元素。

票数 4
EN

Stack Overflow用户

发布于 2008-11-17 09:02:15

对于程序员来说,访问XML中节点的最快方法是XPath。看看xpath methodsxpath itself

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/295112

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档