使用PHP提取XML元素


Extract XML Elements With PHP

我想知道是否有人能帮我。

我有下面的xml文件,我需要从其中两个文件属性中提取值,更准确地说,每个"文件名"的"userid"answers"locationid"。最终,这些值将用于确定在页面加载时将向用户显示哪些文件夹和文件。

 <?xml version="1.0" encoding="utf-8" ?> 
- <files>
  <file name="Test 1/Test Pic 2.jpg" source="Test_Pic_2.jpg" size="728573" originalname="Test Pic 2.jpg" thumbnail="Test_Pic_2.jpg" userid="1" locationid="1" description="No description provided" folder="Test_1" /> 
  <file name="Test 1/stags-snow_1544533c.jpg" source="stags-snow_1544533c.jpg" size="21341" originalname="stags-snow_1544533c.jpg" thumbnail="stags-snow_1544533c.jpg" userid="1" locationid="1" description="Deer head." folder="Test_1" /> 
        </files>

我必须承认,我不知道如何获得这些信息,但经过一番搜索,我在网上找到了一个教程,我已经修改并添加到下面。

<?php 
    if( ! $xml = simplexml_load_file('UploadedFiles/files.xml') ) 
    { 
        echo 'unable to load XML file'; 
    } 
    else 
    { 
        foreach( $xml as $files ) 
        { 
            echo 'userid: '.$file_name->userid.'<br />'; 
            echo 'locationid: '.$file_name->locationid.'<br />'; 
        } 
    } 
?> 

我遇到的问题是,当我运行这个程序时,我只得到以下结果:

userid:locationid:userid:locationid:userid:locationid:

行数与记录数相对应,但我想要得到的也是字段的值。

我只是想知道是否有人可以看看这个,让我知道我哪里错了。

非常感谢

关于SimpleXML需要记住的四件基本事情:

  1. 具有属性的图元访问:$elem->childname
  2. 带下标的属性访问:$elem['attribname']
  3. 带选角的文本内容:(string) $elem
  4. 带有$elem->xpath('')的xpath

您使用的是元素访问(->userid),而应该使用下标['userid'],因为userid是一个属性。

我想您需要这样的东西。(示例位于http://php.net/manual/en/simplexmlelement.attributes.php)

<?php
$string = <<<XML
<a>
 <foo name="one" game="lonely">1</foo>
</a>
XML;
$xml = simplexml_load_string($string);
foreach($xml->foo[0]->attributes() as $a => $b) {
    echo $a,'="',$b,"'"'n";
}
?>

希望这能有所帮助,如果没有,请回复。

$file_name在您的脚本中是未定义的,假设这是您的整个PHP脚本。

您可能需要使用$files->userid$files->locationid