PHP解析案例敏感性

时间:2009-09-04 05:01:30

标签: php xml parsing case-sensitive

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

<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'});,它表明整个结构正确存在且值保持不变。

有谁知道如何纠正这个问题并推进我的工作?非常感谢!

2 个答案:

答案 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'});