1

我有这个 XML:

<?xml version="1.0" encoding="UTF-8"?>
<data>
    <header>
        <export_time>2012-08-28 08:13:36</export_time>
        <file_name>nameasd</file_name>
    </header>
    <shipping>
            <shipping_number>some data</shipping_number>
            <location_id>some data</location_id>
            <status>DONE</status>
                <shipping_line>
                    <article id="1257" />
                    <article id="1177" >
                        <product>5500070000126273</product>
                        <product>5500070000126264</product>
                        <product>5500070000126255</product>
                        <product>5500070000126246</product>
                        <product>5500070000126237</product>
                    </article>
                </shipping_line>
    </shipping>
</data>

ii 可以像这样访问数据:

$shipping_number_array = $xml->xpath('/data/shipping/shipping_number');
$location_id_array = $xml->xpath('/data/shipping/location_id');
$shipping_status_array = $xml->xpath('/data/shipping/status');
$shipping_number = $shipping_number_array[0];
$location_id = $location_id_array[0];
$status = $shipping_status_array[0];

现在我想检查article元素是否有任何子元素,如果是,则将它们放入数组中。

这似乎不起作用,我收到错误:在非对象上调用成员函数 hasChildren()。

            if ($article_array->hasChildren()) {
                error_log('has children');
            }
4

1 回答 1

1

您可以使用 xpath 的child::位置路径来选择文章节点子节点并为文章节点备份一个,如下所示:

$article_array = $xml->xpath('//article/child::*/..');

这应该只返回具有子节点的文章节点(在您的示例中,id 为 1177)。

于 2012-09-05T13:26:58.047 回答