PHP使用PHPSimpleXML从XML获取数据

PHP使用PHPSimpleXML从XML获取数据,php,xml,simplexml,Php,Xml,Simplexml,我试图从xml文件中获取数据,但遇到了一些问题,因为该表的级别比我能找到的示例要多一些 我希望能够遍历的每个实例,因为和只打开和关闭数据。根据记录的事件数重复 表格结构的一个示例是: <?xml version="1.0" encoding="utf-8" standalone="yes"?> <Information> <Events> <Event>

我试图从xml文件中获取数据,但遇到了一些问题,因为该表的级别比我能找到的示例要多一些

我希望能够遍历
的每个实例,因为
只打开和关闭数据。
根据记录的事件数重复

表格结构的一个示例是:

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<Information>
    <Events>
        <Event>
            <Time>3141.29</Time>
            <PrimaryObject ID="487">
                <Name>Player1</Name>
                <Country>us</Country>
            </PrimaryObject>
            <Action>Move</Action>
            <SecondaryObject ID="814">
                <Name>Dog</Name>
                <Parent>487</Parent>
            </SecondaryObject>
        </Event>
    </Events>
</Information>

3141.29
玩家1
我们
移动
狗
487
PHP代码是:

<!DOCTYPE html>
<html>
<body>

<?php
$xml=simplexml_load_file("data.xml") or die("Error: Cannot create object");
foreach($xml->Event as $events) {
    $id = $events->PrimaryObject->attributes();
    $name = $events->PrimaryObject->Name;
    ...
    echo $id['ID'].' '. $name;
    echo "<br>";
  }
?>

</body>
</html>

事件作为$events){
$id=$events->PrimaryObject->attributes();
$name=$events->PrimaryObject->name;
...
echo$id['id'].'.$name;
回声“
”; } ?>
我不确定您到底在寻找什么数据,但以下是使用xpath的所有内容,您可以选择:

$events = $xml->xpath('.//Event');
foreach($events as $event) {        
    $dat = $event->xpath('./PrimaryObject')[0];
    $time= $event->xpath('./Time');    
    $id = $dat->xpath('./@ID');
    $name = $dat->xpath('./Name');
    $country = $dat->xpath('./Country');
    
    $dat2 = $event->xpath('./SecondaryObject')[0];
    $action= $event->xpath('./Action');    
    $id2 = $dat2->xpath('./@ID');
    $name2 = $dat2->xpath('./Name');
    $parent = $dat2->xpath('./Parent');    
            
    echo 'Time: ' . $time[0];
    echo "<br>"; 
    echo 'Action: ' . $action[0];
    echo "<br>";    
    echo "<br>"; 
    echo 'Primary Object Data:';
    echo "<br>";    
    echo 'ID: ' . $id[0];
    echo "<br>";
    echo 'Name: ' . $name[0];
    echo "<br>";
    echo 'Country: ' . $country[0];
    echo "<br>";
    echo "<br>";   
    echo "<br>";
    echo 'Secondary Object Data:';
    echo "<br>";    
    echo 'ID: ' . $id2[0];
    echo "<br>";
    echo 'Name: ' . $name2[0];
    echo "<br>";
    echo 'Parent: ' . $parent[0];
    echo "<br>";         
  }
你必须使用事件

比如说

$xml=simplexml_load_file("data.xml") or die("Error: Cannot create object");

foreach($xml->Events->Event as $events) {
    $id = $events->PrimaryObject->attributes();
    $name = $events->PrimaryObject->Name;
    echo $id['ID'].' '. $name;
    echo "<br>";
}

作为一个额外提示,您实际上不需要
->attributes()
在这里,您只需执行
$id=$events->PrimaryObject['id']
,或者
$id=(string)$events->PrimaryObject['id']
,如果您在其他地方传递它,并且只需要值,而不是表示属性的对象。
$xml->Events->Event as $events
$xml=simplexml_load_file("data.xml") or die("Error: Cannot create object");

foreach($xml->Events->Event as $events) {
    $id = $events->PrimaryObject->attributes();
    $name = $events->PrimaryObject->Name;
    echo $id['ID'].' '. $name;
    echo "<br>";
}
487 Player1