使用PHP提取XML元素

时间:2012-03-14 14:07:21

标签: php xml

我想知道是否有人可以帮助我。

我有以下xml文件,我需要从两个文件属性中提取值,更准确地说,每个'文件名'的'userid'和'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 />'; 
        } 
    } 

?> 

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

用户ID: locationid: 用户身份: locationid: 用户身份: locationid:

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

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

非常感谢

3 个答案:

答案 0 :(得分:2)

关于SimpleXML需要记住的四个基本事项:

  1. 元素访问权限:$elem->childname
  2. 使用下标进行的属性访问:$elem['attribname']
  3. 带有广告投放的文字内容:(string) $elem
  4. xpath与$elem->xpath('')
  5. 当您使用下标->userid时,您正在使用元素访问(['userid']),因为userid是一个属性。

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

我认为你需要这样的东西。 (在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";
}
?>

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