我正在解析一个像这样设置的文件:
<blah-name name="Turkey">
<blah-city name="Test"/>
<CAPS>
<type type="5">
<type-two type="6">
</CAPS>
在我的文件顶部,我创建了$ xmlobj,如下所示:
$xmlobj = simplexml_load_file("TEST.XML");
然后我通过创建一个将所有这些作为属性的类来将值插入表中:
$record->{'blah-city'}->attributes()->name;
当我尝试深入挖掘大写的XML时,一切都会爆发:
$record->{'CAPS'}->type->attributes()->type;
我的服务器在上面的行上出现了这个错误:
Fatal error: Call to a member function attributes() on a non-object
然后它列出了编写上面代码的文件行。
我试图做var_dump($record->{'CAPS'});
,它表明整个结构正确存在且值保持不变。
有谁知道如何纠正这个问题并推进我的工作?非常感谢!
答案 0 :(得分:1)
您是否尝试过这样做:
$record->CAPS->type->attributes()->type;
没有围绕它的{'CAPS'},因为它不是连字符,不是必需的。
根据以下新评论*修改:
有趣的结果。当我跟踪 down {'type-two'} - &gt; attributes() - &gt; id, 它显示了正确的值。
在这种情况下,可能是type-&gt; attributes() - &gt; type有问题。 PHP可能有内部内存引用问题要键入,因为它具有相同的名称。 尝试更改
<type type="5">
到
<type-one type="5">
在您的XML中。这应该解决你的问题。然后,您可以像这样访问它:
$record->{'CAPS'}->{'type-one'}->attributes()->type;
另外,你试过这个吗?
$type_attributes = $record->{'CAPS'}->{'type-one'}->attributes();
$type_value = $type_attributes->type;
这可能会解决您的问题。我还发现this Stack Overflow link可能有所帮助。
答案 1 :(得分:0)
上述XML代码无效xml标记。我不知道您的完整文件是什么样的,但假设以下有效的xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<data>
<blah-name name="Turkey" />
<blah-city name="Test" />
<CAPS>
<type type="5" />
<type-two type="6" />
</CAPS>
</data>
以下PHP代码按预期工作:
$xmlobj = simplexml_load_file("TEST.XML");
$record = new stdClass();
foreach ($xmlobj as $key=>$value) {
$record->$key = $value;
}
var_dump($record->{'CAPS'});