PHP从XML文件中读取xml属性

时间:2014-02-19 12:25:03

标签: php xml

我有一个XML文件,如下所示:

<?xml version="1.0" encoding="utf-8"?>
<Barcodes>
    <Goods>
        <Good ID="1" Name="cc" TechnicalNumber="DN11060122D" SpecialGood="True" Desc="" />
        <Good ID="2" Name="bb" TechnicalNumber="DN11068384B" SpecialGood="True" Desc="" />
    </Goods>
</Barcodes>

我尝试单独阅读每个属性,但在输出中看不到任何内容。

我的PHP:

 <?php

    $folder = "C:/wamp/upload/";        
    $path   = $folder . basename( $_FILES['file']['name']); 

    if(move_uploaded_file($_FILES['file']['tmp_name'], $path)) 
    {        
        $xml = simplexml_load_file("C:/wamp/upload/joomla.xml") 
               or die("Error: Cannot create object");

        foreach($xml->children() as $Goods)
        {
            foreach($Goods->children() as $Good => $data)
            {
                echo $data->ID;
                echo $data->Name;
                echo $data->TechnicalNumber;
                echo "<br />";
            }
        }
    } 
    else
    {
        echo "There was an error uploading the file, please try again!";
    }

提前致谢。

3 个答案:

答案 0 :(得分:1)

您可以通过数组运算符访问属性:

foreach($Goods->children() as $Good => $data){
  echo $data['ID'];
  echo $data['Name'];
  echo $data['TechnicalNumber'];
  echo "<br />";
}

答案 1 :(得分:0)

如果ziollek的回答没有多大意义。

(这是完全正确的,但它表达了这个对象行为的奇怪之处......)

你可以试试这个:

  foreach($xml->children() as $Goods ){
    foreach($Goods->children() as $Good ){
      $GoodAttributes = $Good->attributes();
      echo $GoodAttributes['ID'];
      echo $GoodAttributes['Name'];
      echo $GoodAttributes['TechnicalNumber'];
      echo "<br />";
    }
  }

如果我要var_dump你的一个对象,我会得到这样的东西:

object(SimpleXMLElement)#8 (1) {
  ["@attributes"]=>
  array(5) {
    ["ID"]=>
    string(1) "2"
    ["Name"]=>
    string(2) "bb"
    ["TechnicalNumber"]=>
    string(11) "DN11068384B"
    ["SpecialGood"]=>
    string(4) "True"
    ["Desc"]=>
    string(0) ""
  }
}

也就是说,SimpleXMLElement有一个成员变量,它包含作为数组的属性。

该类有一个重载的访问器,因此您可以引用这些属性,就像SimpleXMLELement本身就是一个数组一样。另外,类似的做法是使子节点可用,就好像它们是公共成员变量一样。

我总是对那个也是数组行为的对象感到吃惊,并且首选使用方法attributes()

来询问对象的属性。

这可能只是个人喜欢的东西,我从来没有用simplexml_load_file生成任何需要执行的东西,因此我可能会有一些我不知道的替代技术的开销。

我只是想让你知道这些选项......

答案 2 :(得分:0)

您正在尝试访问属性而不是元素本身

 foreach($xml->children() as $Goods)
    {
        foreach($Goods->children() as $data)
        {
            echo $data->attributes()->ID;
            echo $data->attributes()->Name;
            echo $data->attributes()->TechnicalNumber;
            echo "<br />";
        }
    }
相关问题