Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Php解析此XML(XBRL)_Php_Xml_Domparser_Xbrl - Fatal编程技术网

如何使用Php解析此XML(XBRL)

如何使用Php解析此XML(XBRL),php,xml,domparser,xbrl,Php,Xml,Domparser,Xbrl,我是PHP新手,我需要解析XML文件,对其进行一些更改并编写它 该文件如下所示: <xbrli:xbrl xsi:schemaLocation="http://xbrl.org/2006/xbrldi http://www.xbrl.org/2006/xbrldi-2006.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:odrp

我是PHP新手,我需要解析XML文件,对其进行一些更改并编写它

该文件如下所示:

<xbrli:xbrl xsi:schemaLocation="http://xbrl.org/2006/xbrldi http://www.xbrl.org/2006/xbrldi-2006.xsd"
                    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                    xmlns:odrpt.0001.list.req.02.00="http://sbr.gov.au/rprt/ato/odrpt/odrpt.0001.list.request.02.00.report"
                    xmlns:ref="http://www.xbrl.org/2006/ref"
                    xmlns:dtyp.02.24="http://sbr.gov.au/fdtn/sbr.02.24.dtyp"
                    xmlns:pyid.02.10="http://sbr.gov.au/icls/py/pyid/pyid.02.10.data"
                    xmlns:emsup.02.08="http://sbr.gov.au/icls/em/emsup/emsup.02.08.data"
                    xmlns:emsup.02.20="http://sbr.gov.au/icls/em/emsup/emsup.02.20.data"
                    xmlns:xbrldt="http://xbrl.org/2005/xbrldt"
                    xmlns:SqNumDim.02.01_typedelement="http://sbr.gov.au/dims/SqNumDim.02.01.dims"
                    xmlns:pyde.02.20="http://sbr.gov.au/icls/py/pyde/pyde.02.20.data"
                    xmlns:dtyp.02.00="http://sbr.gov.au/fdtn/sbr.02.00.dtyp"
                    xmlns:pyid.02.00="http://sbr.gov.au/icls/py/pyid/pyid.02.00.data"
                    xmlns:link="http://www.xbrl.org/2003/linkbase"
                    xmlns:xlink="http://www.w3.org/1999/xlink"
                    xmlns:odrpt.0001.prv.02.00="http://sbr.gov.au/rprt/ato/odrpt/odrpt.0001.private.02.00.module"
                    xmlns:iso4217="http://www.xbrl.org/2003/iso4217"
                    xmlns:pyde.02.00="http://sbr.gov.au/icls/py/pyde/pyde.02.00.data"
                    xmlns:pyde.02.08="http://sbr.gov.au/icls/py/pyde/pyde.02.08.data"
                    xmlns:tech.01.02="http://sbr.gov.au/fdtn/sbr.01.02.tech"
                    xmlns:xbrldi="http://xbrl.org/2006/xbrldi"
                    xmlns:RprtPyType.02.13="http://sbr.gov.au/dims/RprtPyType.02.13.dims"
                    xmlns:tech.01.03="http://sbr.gov.au/fdtn/sbr.01.03.tech"
                    xmlns:xbrli="http://www.xbrl.org/2003/instance"
                    xmlns:pyin.02.02="http://sbr.gov.au/icls/py/pyin/pyin.02.02.data"
                    xmlns:pyde.02.12="http://sbr.gov.au/icls/py/pyde/pyde.02.12.data"
                    xmlns:pyid.02.03="http://sbr.gov.au/icls/py/pyid/pyid.02.03.data">
                    <link:schemaRef xlink:type="simple" xlink:href="http://sbr.gov.au/taxonomy/sbr_au_reports/ato/usmat/usmat_0001/usmat.0001.list.request.02.00.report.xsd"/>
                    <xbrli:context id="Context_Duration_ReportingParty">
                        <xbrli:entity>
                            <xbrli:identifier scheme="http://www.abr.gov.au/abn">111111111</xbrli:identifier>
                            <xbrli:segment>
                                <xbrldi:explicitMember dimension="RprtPyType.02.13:ReportPartyTypeDimension">RprtPyType.02.13:ReportingParty</xbrldi:explicitMember>
                            </xbrli:segment>
                        </xbrli:entity>
                        <xbrli:period>
                            <xbrli:startDate>2014-06-01</xbrli:startDate>
                            <xbrli:endDate>2014-06-01</xbrli:endDate>
                        </xbrli:period>
                    </xbrli:context>
                    <xbrli:context id="Context_Duration_SuperFundMember">
                        <xbrli:entity>
                            <xbrli:identifier scheme="http://www.ato.gov.au/tfn">11111111</xbrli:identifier>
                            <xbrli:segment>
                                <xbrldi:explicitMember dimension="RprtPyType.02.13:ReportPartyTypeDimension">RprtPyType.02.13:SuperFundMember</xbrldi:explicitMember>
                            </xbrli:segment>
                        </xbrli:entity>
                        <xbrli:period>
                            <xbrli:startDate>2015-06-01</xbrli:startDate>
                            <xbrli:endDate>2014-06-01</xbrli:endDate>
                        </xbrli:period>
                    </xbrli:context>
                    <pyde.02.00:OrganisationNameDetails.OrganisationalName.Text contextRef="Context_Duration_ReportingParty">CCCorp</pyde.02.00:OrganisationNameDetails.OrganisationalName.Text>
                    <pyde.02.00:PersonNameDetails.FamilyName.Text contextRef="Context_Duration_SuperFundMember">CC</pyde.02.00:PersonNameDetails.FamilyName.Text>
                    <pyde.02.00:PersonNameDetails.GivenName.Text contextRef="Context_Duration_SuperFundMember">CC</pyde.02.00:PersonNameDetails.GivenName.Text>
                    <pyde.02.00:PersonNameDetails.OtherGivenName.Text contextRef="Context_Duration_SuperFundMember">CC</pyde.02.00:PersonNameDetails.OtherGivenName.Text>
                    <pyde.02.12:PersonDemographicDetails.Birth.DayofMonth contextRef="Context_Duration_SuperFundMember">---18</pyde.02.12:PersonDemographicDetails.Birth.DayofMonth>
                    <pyde.02.12:PersonDemographicDetails.Birth.Month contextRef="Context_Duration_SuperFundMember">--12</pyde.02.12:PersonDemographicDetails.Birth.Month>
                    <pyde.02.12:PersonDemographicDetails.Birth.Year contextRef="Context_Duration_SuperFundMember">1960</pyde.02.12:PersonDemographicDetails.Birth.Year>
                    <pyid.02.10:Identifiers.SuperannuationMemberAccount.Identifier contextRef="Context_Duration_SuperFundMember">true</pyid.02.10:Identifiers.SuperannuationMemberAccount.Identifier>
                    <pyde.02.00:AddressDetails.Line1.Text contextRef="Context_Duration_SuperFundMember">CC</pyde.02.00:AddressDetails.Line1.Text>
                    <pyde.02.00:AddressDetails.Line2.Text contextRef="Context_Duration_SuperFundMember">CC</pyde.02.00:AddressDetails.Line2.Text>
                    <pyde.02.00:AddressDetails.LocalityName.Text contextRef="Context_Duration_SuperFundMember">CC</pyde.02.00:AddressDetails.LocalityName.Text>
                    <pyde.02.00:AddressDetails.Postcode.Text contextRef="Context_Duration_SuperFundMember">3350</pyde.02.00:AddressDetails.Postcode.Text>
                    <pyde.02.00:AddressDetails.StateOrTerritory.Code contextRef="Context_Duration_SuperFundMember">CC</pyde.02.00:AddressDetails.StateOrTerritory.Code>
                    <pyde.02.08:AddressDetails.Country.Code contextRef="Context_Duration_SuperFundMember">au</pyde.02.08:AddressDetails.Country.Code>
                    <emsup.02.08:SuperannuationFundDetails.UniqueSuperannuationIdentifier.Identifier contextRef="Context_Duration_SuperFundMember">abc1234ab</emsup.02.08:SuperannuationFundDetails.UniqueSuperannuationIdentifier.Identifier>
                </xbrli:xbrl>

111111111
RprtPyType.02.13:报告方
2014-06-01
2014-06-01
11111111
RprtPyType.02.13:超级基金成员
2015-06-01
2014-06-01
CCCorp
科科斯群岛
科科斯群岛
科科斯群岛
---18
--12
1960
真的
科科斯群岛
科科斯群岛
科科斯群岛
3350
科科斯群岛
金
abc1234ab
您可以在此处查看:

我用一些例子尝试了DOM解析器,但我不能解析字段 比如:



如果需要任何其他信息,请告诉我。

如果您使用类似于
simplexml\u load\u string
的方法加载数据,则以下操作将完成此工作

    $xml = simplexml_load_string( '
            <xbrli:xbrl xsi:schemaLocation="http://xbrl.org/2006/xbrldi http://www.xbrl.org/2006/xbrldi-2006.xsd"
                       ... 
            </xbrli:xbrl>
');


foreach($xml->xpath('//pyde.02.00:AddressDetails.Postcode.Text') as $postCode) {
    print_r($postCode);
}
所以如果在代码中你这样做了

$postCode = $xml->xpath('//pyde.02.00:AddressDetails.Postcode.Text')[0];
$postCode[0] = "3351";
这将导致元素现在被删除

SimpleXMLElement Object
(
    [@attributes] => Array
        (
            [contextRef] => Context_Duration_SuperFundMember
        )

    [0] => 3351
)
如果要将其保存到文件中,则

$xml->asXml( $fileName );

使用以下代码:

       $xmldoc = new DOMDocument();
            $xmldoc->load("myFile.xml");
            $xpath = new DOMXPath($xmldoc);
            $xpath->registerNamespace("xbrli",  "http://www.xbrl.org/2003/instance");
            $xpath->registerNamespace("pyde.02.00", "http://sbr.gov.au/icls/py/pyde/pyde.02.00.data");

            $organizationNameList = $xpath->query("/xbrli:xbrl/pyde.02.00:OrganisationNameDetails.OrganisationalName.Text[@contextRef='    Context_Duration_ReportingParty']");
            if($organizationNameList->length != 0){
                $orgNode = $organizationNameList->item(0);
                $orgName = $organizationNameList->length === 1 ? $organizationNameList->item(0)->nodeValue : null;
                echo $orgName;
            }

使用以下代码,我能够使用特定的查询读取一个值

您能提供一个解析xml文件中的所有元素的解决方案吗?Orry,“解析所有元素”是什么意思?通过解析,我的意思是读取,现在我能够读取所有元素,您能指导我如何更改值吗。请建议我如何更改值并生成更新XML文件从文件加载只是
simplexml\u load\u文件($fileName)
$xml->asXml( $fileName );
       $xmldoc = new DOMDocument();
            $xmldoc->load("myFile.xml");
            $xpath = new DOMXPath($xmldoc);
            $xpath->registerNamespace("xbrli",  "http://www.xbrl.org/2003/instance");
            $xpath->registerNamespace("pyde.02.00", "http://sbr.gov.au/icls/py/pyde/pyde.02.00.data");

            $organizationNameList = $xpath->query("/xbrli:xbrl/pyde.02.00:OrganisationNameDetails.OrganisationalName.Text[@contextRef='    Context_Duration_ReportingParty']");
            if($organizationNameList->length != 0){
                $orgNode = $organizationNameList->item(0);
                $orgName = $organizationNameList->length === 1 ? $organizationNameList->item(0)->nodeValue : null;
                echo $orgName;
            }