我有这个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;
}
}
但我得到的是第一个节点名称而不是最后一个... 谢谢你的帮助
答案 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)