1

我正在解析一个像这样设置的文件:

<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'});,它表明整个结构正确存在,值完好无损。

有谁知道我该如何纠正这个问题并继续我的工作?这将不胜感激!

4

2 回答 2

1

您是否尝试过这样做:

$record->CAPS->type->attributes()->type;

只是没有它周围的 {'CAPS'} ,因为它没有连字符,所以没有必要。

*根据您在下面的新评论进行编辑:

有趣的结果。当我追踪 {'type-two'}->attributes()->id 时,它显示了正确的值。

那样的话,很可能是type->attributes()->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;

这可能会解决您的问题。我还发现这个 Stack Overflow 链接可能会有所帮助。

于 2009-09-04T05:18:15.243 回答
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'});
于 2009-09-04T05:22:19.730 回答