PHP simplexml_load_file属性相同

时间:2017-03-06 13:55:47

标签: php xml

我有这个xml文件:

<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“19.11.1999”,以及RecNo_2“22.11.1999”。但它什么都不输出......我怎样才能简单地得到这些值?

1 个答案:

答案 0 :(得分: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];
}

祝你好运。