如何在SimpleXMLElement中读取特定数量的代码

时间:2016-09-17 03:30:08

标签: php xml simplexml

我正在尝试读取SimpleXMLElement / XML文件的一部分。 问题是我无论如何都无法获得所需的文本。

我尝试调试我的XML,所以我这样打印:

 foreach($response->items as $item) {
                   fwrite($file, var_export($item, TRUE));
               }

输出

  

的SimpleXMLElement :: __ set_state(阵列(      'item'=>     阵列(       0 =>       的SimpleXMLElement :: __ set_state(阵列(          'id'=> '000-1',          'description'=> '笔记本普拉塔',          'quantity'=> '1',          'amount'=> '1830.00',       )),       1 =>       的SimpleXMLElement :: __ set_state(阵列(          'id'=> 'AB01',          'description'=> 'Notebook Preto',          'quantity'=> '2',          'amount'=> '1340.00',       )),     )   ))

但是当我尝试检索特定项目内的数据时,返回为空。 我尝试了以下方法:

fwrite($file, $item->amount);
//
fwrite($file, $item->{'amount'});
//
fwrite($file, $items->$item->amount);

但似乎没有任何效果。

如何更正语法,以获得预期的?我希望该文件写成'1830.00'和'1340.00',但我只能得到空白。

XML LIKE THIS FOR REFERENCE

1 个答案:

答案 0 :(得分:0)

如果你用英文阅读它,这一点似乎是合乎逻辑的,这让你感到愚蠢:

foreach($response->items as $item) {

但它与XML的结构不匹配。

考虑这个XML:

<?xml version="1.0"?><a>
    <b>
        <c>first C</c>
        <c>second C</c>
    </b>
</a>

如果$response是整个文档(<a>...</a>),那么要访问每个<c>,您需要执行此操作:

foreach($response->b->c as $c)

您的XML具有相同的结构:

<?xml version="1.0"?><transaction>
    ...
    <items>
        <item>first item</item>
        <item>second item</item>
    </items>
    ...
</transaction>

所以你的循环必须是:

foreach($response->items->item as $item)

然后<item>的孩子将按预期使用,例如<amount>

echo $item->amount;