2017-03-06 44 views
1

我有這個XML文件:PHP使用simplexml_load_file相同的屬性

<RecNo_1> 
<Field Name="erfdat">19.11.1999</Field> 
<Field Name="erfuser">user1</Field> 
<Field Name="l_dat">18.12.2014</Field> 
<Field Name="l_user">deluser1</Field> 
</RecNo_1> 

<RecNo_2> 
<Field Name="erfdat">22.11.1999</Field> 
<Field Name="erfuser">user2</Field> 
<Field Name="l_dat">18.12.2015</Field> 
<Field Name="l_user">deluser2</Field> 
</RecNo_2> 

我試圖讓字段是這樣的:

$xml = simplexml_load_file($xmlFile); 

foreach($xml->children() as $ob) { 
    var_dump($ob->Name["erfdat"]); 
} 

在我看來這應該RecNo_1「1999年11月19日」輸出,RecNo_2「22.11.1999」。但它不輸出任何內容......我怎樣才能簡單地得到這些值?

+0

這將有助於 - http://stackoverflow.com/questions/992450/simplexml-selecting-elements-which-have-a-certain-attribute-value – Tom

回答

1
$xml = '<root> 
<RecNo_1> 
<Field Name="erfdat">19.11.1999</Field> 
<Field Name="erfuser">user1</Field> 
<Field Name="l_dat">18.12.2014</Field> 
<Field Name="l_user">deluser1</Field> 
</RecNo_1> 
<RecNo_2> 
<Field Name="erfdat">22.11.1999</Field> 
<Field Name="erfuser">user2</Field> 
<Field Name="l_dat">18.12.2015</Field> 
<Field Name="l_user">deluser2</Field> 
</RecNo_2> 
</root>'; 

$xml = simplexml_load_string($xml); 

$result = $xml->xpath('RecNo_1/Field'); 

while(list(,$node) = each($result)) { 
    if("erfdat"==(string)$node['Name']){ 
    print $node;#shows once 19.11.1999 
    } 
} 

點:

  • 你的XML是缺少一個根節點(我增加了一個在我的例子)
  • 我只能訪問RecNo_1直接,良好的XML,他們應該只是像一個節點RecNo(無編號)
  • 如果從RecNo_2想要的值,你必須改變xpath

精簡版在例如所有塊:

$xml = simplexml_load_string($xml); 
for($i=1;$i<=2;$i++){ 
    $result = $xml->xpath("RecNo_{$i}/Field[@Name='erfdat']"); 
    print (string)$result[0]; 
} 

有一個愉快的。

+0

非常感謝您!這正是我需要的! – Nilse

相關問題