【问题标题】:SimpleXML Skipping AttributesSimpleXML 跳过属性
【发布时间】:2018-04-19 11:07:20
【问题描述】:

测试 XML:

<?xml version="1.0" encoding="UTF-8"?>
<Transfer>
    <ABR recordLastUpdatedDate="20180329" replaced="N">
        <ABN status="ACT" ABNStatusFromDate="20000214">80007321682</ABN>
        <EntityType>
            <EntityTypeInd>PUB</EntityTypeInd>
            <EntityTypeText>Australian Public Company</EntityTypeText>
        </EntityType>
        <MainEntity>
            <NonIndividualName type="MN">
                <NonIndividualNameText>BLACK CABS COMBINED PTY LTD</NonIndividualNameText>
            </NonIndividualName>
            <BusinessAddress>
                <AddressDetails>
                    <State>VIC</State>
                    <Postcode>3166</Postcode>
                </AddressDetails>
            </BusinessAddress>
        </MainEntity>
    </ABR>
</Transfer>

PHP 脚本:

$f='test.xml';
$reader=new XMLReader();
$reader->open($f);
while($reader->read()){
    if($reader->nodeType==XMLReader::ELEMENT && $reader->name=='ABR'){
        $doc=new DOMDocument('1.0','UTF-8');
        $xml=simplexml_import_dom($doc->importNode($reader->expand(),true));
        print_r($xml);
    }
}
$reader->close();

PHP 输出:

SimpleXMLElement Object
(
    [@attributes] => Array
        (
            [recordLastUpdatedDate] => 20180329
            [replaced] => N
        )

    [ABN] => 80007321682
    [EntityType] => SimpleXMLElement Object
        (
            [EntityTypeInd] => PUB
            [EntityTypeText] => Australian Public Company
        )

    [MainEntity] => SimpleXMLElement Object
        (
            [NonIndividualName] => SimpleXMLElement Object
                (
                    [@attributes] => Array
                        (
                            [type] => MN
                        )

                    [NonIndividualNameText] => BLACK CABS COMBINED PTY LTD
                )

            [BusinessAddress] => SimpleXMLElement Object
                (
                    [AddressDetails] => SimpleXMLElement Object
                        (
                            [State] => VIC
                            [Postcode] => 3166
                        )

                )

        )

)

问题:

ABN 元素的属性(statusABNStatusFromDate)不在输出中,尽管其他属性在。

请帮助我理解为什么缺少这些属性。

PS - 虚拟文本,所以 SO 不会警告我我的帖子主要是代码

【问题讨论】:

  • 记下答案,只是记下:print_r($xml-&gt;ABN) 显示它们。此外,print_r($xml) 会在您有子节点时显示它们(例如:&lt;ABN status="ACT" ABNStatusFromDate="20000214"&gt;&lt;node&gt;80007321682&lt;/node&gt;&lt;/ABN&gt;)。
  • 我明白了:print_r 是一种糟糕的 XML 数据输出方式。通过直接引用 XML 数据,我现在走在了正确的轨道上。

标签: php simplexml xmlreader


【解决方案1】:

答案:print_r 不是用来显示 SimpleXML 对象的。

我可以通过$xml-&gt;ABN['status']直接访问该属性。

【讨论】:

    猜你喜欢
    • 2013-12-23
    • 1970-01-01
    • 1970-01-01
    • 2013-08-14
    • 2012-07-11
    • 2012-05-19
    • 2012-09-08
    • 1970-01-01
    相关资源
    最近更新 更多