0
function loadFilesToArrays(){
    $notpromo1Array = simplexml_load_file('pages/hegnar/source/1/notpromo-1_08_04_2013_1.xml');
        foreach($notpromo1Array as $xml){
            echo $xml -> getName();
            echo "<br>";
            echo $xml -> ORDREHODE -> SluttkundeNr;
            echo "<br>";
        }
}

我的 XML 看起来像这样

<?xml version="1.0" encoding="UTF-8"?>
<IS_DATA>
<ORDRER class="linked-list">
    <ORDREHODE>
        <ORDREKUNDENR>10541</ORDREKUNDENR>
        <SluttkundeNr>1240</SluttkundeNr>
                    <AND OTHER PROPERTIES></AND OTHER PROPERTIES>..........
    </ORDREHODE>
    <ORDREHODE>
        <ORDREKUNDENR>10541</ORDREKUNDENR>
        <SluttkundeNr>1344</SluttkundeNr>
                    <AND OTHER PROPERTIES></AND OTHER PROPERTIES>..........
    </ORDREHODE>
    <ORDREHODE>
        ETC ETC ETC ..................
    </ORDREHODE>
</ORDRER>
</IS_DATA>

并且 XML 已正确结束,等等,我使用了 notepad++ 的 xml 验证器。

我不明白为什么当我调用 loadFilesToArray 函数时,我收到此错误通知:尝试在第 104 行的 /path/to/file/page1.php 中获取非对象的属性 IS_DATA 毕竟包含在大括号中,并且单引号,正如我看到很多人在想要从 XML 中回显在 XML 中的属性名称中具有特殊字符的数据时所指的那样。

4

3 回答 3

1

请立即提供您的 xml 文件的正确路径 a.xml 和 test.php 都在同一个文件夹中

一个.xml

<?xml version="1.0" encoding="UTF-8"?>
<IS_DATA>
<ORDRER class="linked-list">
    <ORDREHODE>
        <ORDREKUNDENR>10541</ORDREKUNDENR>
        <SluttkundeNr>1240</SluttkundeNr>
                    <ANDOTHERPROPERTIES></ANDOTHERPROPERTIES>
    </ORDREHODE>
    <ORDREHODE>
        <ORDREKUNDENR>10541</ORDREKUNDENR>
        <SluttkundeNr>1344</SluttkundeNr>
                    <ANDOTHERPROPERTIES></ANDOTHERPROPERTIES>
    </ORDREHODE>
    <ORDREHODE>
        ETC ETC ETC ..................
    </ORDREHODE>
</ORDRER>
</IS_DATA>

测试.php

    <?php
$notpromo1Array = simplexml_load_file("a.xml");
foreach($notpromo1Array as $xml)
  {
    foreach($xml as $child)
    {
        echo $child->getName();
        echo "<br>";
        echo $child->SluttkundeNr;
        echo "<br>";
    } 
  }

 /*RESULT
  * ORDREHODE
    1240
    ORDREHODE
    1344
    ORDREHODE
  */

?> 
于 2013-04-18T08:53:36.427 回答
1

您需要调试您的代码:

foreach ($notpromo1Array as $xml)
{
    echo $xml->getName(), "\n";
}

这为您提供了由 表示的元素的名称$xml

ORDRER

由于该元素没有任何子元素<IS_DATA>,simplexml 为您提供NULL. 然后你访问->ORDRER哪个NULL不起作用,因为它不是一个对象:

注意:试图获取非对象的属性

就是这么简单。只需访问正确的元素,就可以了:

foreach ($notpromo1Array as $xml)
{
    echo $xml->getName(), "\n";
    echo $xml->ORDREHODE->SluttkundeNr, "\n";
}

输出:

ORDRER
1240
于 2013-04-18T10:13:41.930 回答
0

刚刚做了一个快速测试,这就是我想出的。替换你的foreach代码:

foreach($notpromo1Array as $xml){
   echo $xml->ORDREHODE->SluttkundeNr;
   echo "<br />";
}

仅供参考,我使用以下 XML 文件作为示例,它打印了 1240:

<?xml version="1.0" encoding="UTF-8"?>  
<IS_DATA>
    <ORDRER class="linked-list">
        <ORDREHODE>
            <ORDREKUNDENR>10541</ORDREKUNDENR>
            <SluttkundeNr>1240</SluttkundeNr>
        </ORDREHODE>
    </ORDRER>
</IS_DATA>
于 2013-04-18T09:12:48.147 回答