如何使用PHP访问xml文件的最后一个元素

时间:2017-09-28 01:59:54

标签: php xml

我有这个xml对象,它被传递给一个名为$ var_PersonalStatus

的php变量
<Statuses>
  <Status>
    <Name>Surviving Spouse</Name>
    <CreatedDate>2017-05-18</CreatedDate>
  </Status>
  <Status>
    <Name>Spouse</Name>
    <CreatedDate>2017-05-18</CreatedDate>
  </Status>
</Statuses>

如果我打印出变量$ var_PersonalStatus,我会像这样得到整个xml:

Retiree2017-09-28Next of kin2017-09-28Retiree2017-09-28Employee2017-09-28
Deceased2017-09-28Next of Kin2017-09-28Retiree2017-09-28Spouse2017-09-282017-09-27

我希望能够使用PHP访问最后一个节点,这样我就可以放置最后一个字段&#34; Name&#34;在选择框中。到目前为止,我一直在使用它:

<?php
$xml = simplexml_load_string($var_PersonalStatus);
if ($var_PersonalStatus != '') {
  foreach($xml as $dta => $fd){
    $var_Ps = $fd->Name;
  }
}

但我得到的是第一个节点名称而不是最后一个...  谢谢你的帮助

2 个答案:

答案 0 :(得分:0)

使用xpath可以解决这类问题。

<?php
$var_PersonalStatus =<<<EOF
<Statuses>
  <Status>
    <Name>Surviving Spouse</Name>
    <CreatedDate>2017-05-18</CreatedDate>
  </Status>
  <Status>
    <Name>Spouse</Name>
    <CreatedDate>2017-05-18</CreatedDate>
  </Status>
</Statuses>
EOF;

$xml=simplexml_load_string($var_PersonalStatus); 

// TODO: Some sanity checks might be required here as the returned value of xpath could be empty.
$var_Ps=$xml->xpath('//Status[last()]/Name')[0];

替代xpath查询是:

  • (//Status[last()])/Name选择整个文档中最后一个Name元素的Status
  • /Statuses/Status[last()]/Name选择最后Name的{​​{1}},Status是根Statuses元素的直接子项。

如果Status元素可以包含嵌套的Status元素,那么这些替代方案就变得相关了,如下例所示。

<Statuses>
  <Status>
    <Name>Surviving Spouse</Name>
    <CreatedDate>2017-05-18</CreatedDate>
    <Statuses>
      <Status>
        <Name>Spouse</Name>
        <CreatedDate>2017-05-18</CreatedDate>
      </Status>
    </Statuses>
  </Status>
</Statuses>

答案 1 :(得分:0)

这将为您提供最后一个元素

<?php

$xml =new SimpleXMLElement($xmlstr); 
$var_Ps = "";
if($xmlstr != ''){
    foreach($xml as $dta => $fd){
        $var_Ps=$fd;
    }
}   
var_dump($var_Ps);
?>

输出将是:

object(SimpleXMLElement)[4]
public 'Name' => string 'Spouse' (length=6)
public 'CreatedDate' => string '2017-05-18' (length=10)

获取最后一个元素的另一种方法是:

$xml =new SimpleXMLElement($xmlstr);
$last = $xml->xpath("/Statuses/Status[last()]");
var_dump($last);

这将作为输出返回

array (size=1)
0 => 
object(SimpleXMLElement)[1]
  public 'Name' => string 'Spouse' (length=6)
  public 'CreatedDate' => string '2017-05-18' (length=10)