2017-09-28 67 views
0

我有被傳遞給名爲$ 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 PHP變量該XML對象訪問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的最後一個節點,這樣我就可以在選擇框中放置最後一個字段「名稱」。到目前爲止,我一直在使用這個:

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

,但我得到的是第一個節點名稱不是最後一個...... 感謝您的幫助

回答

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整個文檔中選擇最後Status元素的Name
  • /Statuses/Status[last()]/Name選擇最後StatusName,它是根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> 
+0

幾乎正確。 ''Status [last()]'選擇每個Status的元素,它是其父代的最後一個'Status'子元素。如果所有'Status'元素都是彼此的兄弟元素,那很好,但是更貼近所述要求的是'(// Status)[last()]',它選擇整個文檔中最後一個'Status'元素。 –

+0

好,趕快,謝謝。我在我的回答中加了這個。 – Corvus

+0

@Corvus謝謝你的回答,但它返回用戶輸入的第一個值,我需要最後一個,也許我需要查找xml對象中的第一個節點? –

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)