我有一个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!";
}
提前致谢。
答案 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 />";
}
}