【问题标题】:PHP Parsing Case SensitivityPHP 解析大小写敏感
【发布时间】:2009-09-04 05:01:29
【问题描述】:

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

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

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

【问题讨论】:

  • 你能发布一个 $record 的 vardump() 吗?
  • 那么你从 'var_dump($record->{'CAPS'}->type);' 中得到了什么?
  • object(SimpleXMLElement)#75 (2) { ["type"]=> object(SimpleXMLElement)#77 (1) { ["@attributes"]=> array(3) { [" type"]=> string(2) "14" ["points"]=> string(1) "1" ["good"]=> string(4) "true" } } ["player"]=> object (SimpleXMLElement)#78 (1) { ["@attributes"]=> array(2) { ["id"]=> string(6) "155685" ["global-id"]=> string(6) " 399433" } } } 赛季:2008

标签: php xml parsing case-sensitive


【解决方案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;

这可能会解决您的问题。我还找到了this Stack Overflow link,这可能会有所帮助。

【讨论】:

  • 你能告诉我$record的结果->{'CAPS'}->{'type-two'}->attributes()->type;请问?
  • 有趣的结果。当我追踪 {'type-two'}->attributes()->id 时,它显示了正确的值。
  • 那么,很可能是type->attributes()->type有问题。 PHP 可能有一个内部内存引用问题要键入,因为它具有相同的名称。尝试在您的 XML 中将 更改为 。这应该可以解决您的问题。
  • 嗯,我愿意,但这是我们从外部公司提供的外部 XML 文件,所以我无法更改 XML,除非有某种方法可以在飞行,在线或其他方式。
【解决方案2】:

以上 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'});

【讨论】:

  • 如您所见,他能够访问某些部分,并且 var_dump 完美地显示了他需要的元素。
  • 是的 - 我可以深入了解所有内容,只要它在 XML 之外
  • 是否在每个大写标签上都抛出错误?如果您将其更改为 并尝试访问它会发生什么?
  • 在其他一些情况下,大写标签现在似乎可以正常工作。我不再相信它是大写标签。我最好的猜测是它与史密斯先生在他的回答中提到的内容有关,但我不确定。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-27
  • 1970-01-01
  • 2013-07-23
  • 2016-05-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多