首页 > 解决方案 > 在 PHP 中读取 XML 文件时需要帮助

问题描述

我正在尝试使用 simpleXML 从 PHP 中的 XML 文件中获取数据,但是当我尝试读取它时,我不断收到错误“simplexml 试图获取非对象的属性”。这是我正在使用的 XML 文件:


  <?xml version="1.0" encoding="UTF-8" ?> 
- <cteProc versao="3.00" xmlns="http://www.portalfiscal.inf.br/cte">
- <CTe xmlns="http://www.portalfiscal.inf.br/cte">
- <infCte versao="3.00" Id="CTe35191103408053000134570050000004561000426290">
- <ide>
  <cUF>35</cUF> 
  <cCT>00042629</cCT> 
  <CFOP>6932</CFOP> 
  <natOp>TRANSP INICIADO UF DIVERSA DO PRESTADOR</natOp> 
  <mod>57</mod> 
  <serie>5</serie> 
  <nCT>456</nCT> 
  <dhEmi>2019-11-06T15:02:53-03:00</dhEmi> 
  <tpImp>1</tpImp> 
  <tpEmis>1</tpEmis> 
  <cDV>0</cDV> 
  <tpAmb>1</tpAmb> 
  <tpCTe>0</tpCTe> 
  <procEmi>0</procEmi> 
  <verProc>Bsoft 3.01.0.0716</verProc> 
  <cMunEnv>3502754</cMunEnv> 
  <xMunEnv>Aracariguama</xMunEnv> 
  <UFEnv>SP</UFEnv> 
  <modal>01</modal> 
  <tpServ>0</tpServ> 
  <cMunIni>1506500</cMunIni> 
  <xMunIni>Santa Isabel do Para</xMunIni> 
  <UFIni>PA</UFIni> 
  <cMunFim>3106200</cMunFim> 
  <xMunFim>Belo Horizonte</xMunFim> 
  <UFFim>MG</UFFim> 
  <retira>1</retira> 
  <indIEToma>1</indIEToma> 
- <toma3>
  <toma>3</toma> 
  </toma3>
  </ide>
- <compl>
  <xCaracAd>Normal</xCaracAd> 
- <Entrega>
- <semData>
  <tpPer>0</tpPer> 
  </semData>
- <semHora>
  <tpHor>0</tpHor> 
  </semHora>
  </Entrega>
  <xObs>;Observacao do Pagador: ;Nota Fiscal: 93</xObs> 
  </compl>
- <emit>
  <CNPJ>03408053000134</CNPJ> 
  <IE>734062539116</IE> 
  <xNome>M G TRANSPORTES E LOCACAO LTDA EPP</xNome> 
  <xFant>M G TRANSPORTES E LOCACAO LTDA EPP</xFant> 
- <enderEmit>
  <xLgr>R. DR. RUBEN DARIO ALMONACID</xLgr> 
  <nro>177</nro> 
  <xBairro>RONDA</xBairro> 
  <cMun>3502754</cMun> 
  <xMun>Aracariguama</xMun> 
  <CEP>18147000</CEP> 
  <UF>SP</UF> 
  <fone>1142048800</fone> 
  </enderEmit>
  </emit>
- <rem>
  <CNPJ>30684804000118</CNPJ> 
  <IE>156065827</IE> 
  <xNome>PURO SABOR COM E DISTRI DE POLPAS DE FRUTAS EIRELI</xNome> 
  <xFant>ACAI PURO SABOR</xFant> 
- <enderReme>
  <xLgr>AV PEDRO CONSTANTINO</xLgr> 
  <nro>1387</nro> 
  <xBairro>CENTRO</xBairro> 
  <cMun>1506500</cMun> 
  <xMun>Santa Isabel do Para</xMun> 
  <CEP>68790000</CEP> 
  <UF>PA</UF> 
  <cPais>1058</cPais> 
  <xPais>Brasil</xPais> 
  </enderReme>
  </rem>
- <dest>
  <CNPJ>23149412000193</CNPJ> 
  <IE>0625428900040</IE> 
  <xNome>ORGANIZACAO FERRAZ LTDA - ME</xNome> 
  <fone>3133832649</fone> 
- <enderDest>
  <xLgr>R AMANDA</xLgr> 
  <nro>165</nro> 
  <xBairro>BETANIA</xBairro> 
  <cMun>3106200</cMun> 
  <xMun>Belo Horizonte</xMun> 
  <CEP>30580500</CEP> 
  <UF>MG</UF> 
  <cPais>1058</cPais> 
  <xPais>Brasil</xPais> 
  </enderDest>
  </dest>
- <vPrest>
  <vTPrest>4000.00</vTPrest> 
  <vRec>4000.00</vRec> 
- <Comp>
  <xNome>Frete Valor</xNome> 
  <vComp>4000.00</vComp> 
  </Comp>
  </vPrest>
- <imp>
- <ICMS>
- <ICMSOutraUF>
  <CST>90</CST> 
  <vBCOutraUF>0.00</vBCOutraUF> 
  <pICMSOutraUF>0.00</pICMSOutraUF> 
  <vICMSOutraUF>0.00</vICMSOutraUF> 
  </ICMSOutraUF>
  </ICMS>
  </imp>
- <infCTeNorm>
- <infCarga>
  <vCarga>49000.00</vCarga> 
  <proPred>ACAI POPULAR</proPred> 
  <xOutCat>FARDOS</xOutCat> 
- <infQ>
  <cUnid>01</cUnid> 
  <tpMed>PESO</tpMed> 
  <qCarga>14.2800</qCarga> 
  </infQ>
- <infQ>
  <cUnid>03</cUnid> 
  <tpMed>VOLUMES</tpMed> 
  <qCarga>350.0000</qCarga> 
  </infQ>
  <vCargaAverb>49000.00</vCargaAverb> 
  </infCarga>
- <infDoc>
- <infNFe>
  <chave>15191130684804000118550010000000931251541070</chave> 
  <dPrev>2019-11-07</dPrev> 
  </infNFe>
  </infDoc>
- <infModal versaoModal="3.00">
- <rodo>
  <RNTRC>01675415</RNTRC> 
  </rodo>
  </infModal>
  </infCTeNorm>
- <autXML>
  <CNPJ>08117647000100</CNPJ> 
  </autXML>
  </infCte>
- <infCTeSupl>
- <qrCodCTe>
- <![CDATA[ https://nfe.fazenda.sp.gov.br/CTeConsulta/qrCode?chCTe=35191103408053000134570050000004561000426290&tpAmb=1
  ]]> 
  </qrCodCTe>
  </infCTeSupl>
- <Signature xmlns="http://www.w3.org/2000/09/xmldsig#">
- <SignedInfo>
  <CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315" /> 
  <SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1" /> 
- <Reference URI="#CTe35191103408053000134570050000004561000426290">
- <Transforms>
  <Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature" /> 
  <Transform Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315" /> 
  </Transforms>
  <DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" /> 
  <DigestValue>x/LIWXdM2mO7su2aj+wtnlkv4LI=</DigestValue> 
  </Reference>
  </SignedInfo>
  <SignatureValue>exLyo9adG1pYkmSIKJ5W9bbYp6rx7eDWb5JlrdQMBBrvF3XtQ6Xq2Lsy9Y4Ii8wBIyNpA6h10Y6kTOiHTNXHeYxuBAbYlzx37nU7FM/dSjVD3y9+myuJwJOfRO0cZdoTnmdBIY9fR1vJYytd91EOXxd2Kngnn182hRcct3NAa+vjLh0ZM0E10cT9g4w36gA30n0cLrIQ4LzpvDstm0/L51RBMocX6Y7SfH289qQmyP7Xi8OT9arFB80nGVGK9xYwGGx1+R45wqlKcr26puPXQu1bfXauOfu8x1PSJwBToeyp6C3AivsDuprMIN8SO7HaTCRnwBlF34VStYI69iDNTA==</SignatureValue> 
- <KeyInfo>
- <X509Data>
  <X509Certificate>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</X509Certificate> 
  </X509Data>
  </KeyInfo>
  </Signature>
  </CTe>
- <protCTe versao="3.00">
- <infProt>
  <tpAmb>1</tpAmb> 
  <verAplic>SP-CTe-08-10-2019</verAplic> 
  <chCTe>35191103408053000134570050000004561000426290</chCTe> 
  <dhRecbto>2019-11-06T16:09:38-03:00</dhRecbto> 
  <nProt>135191641022356</nProt> 
  <digVal>x/LIWXdM2mO7su2aj+wtnlkv4LI=</digVal> 
  <cStat>100</cStat> 
  <xMotivo>Autorizado o uso do CT-e</xMotivo> 
  </infProt>
  </protCTe>
  </cteProc>

例如,我尝试使用 $cnpj = $xmldata->cteProc->CTe->infCte->emit 获取标签下方包围的 CNPJ 的值,但没有成功。抱歉,我对 PHP 有点陌生,不知道哪里出错了,谢谢

标签: phpxml

解决方案


simplexml_load_[string|file]()将消耗包装标签,在你的情况下是cteProc标签。

这意味着您无需查看该对象内部即可访问其中的其他对象。

要到达CNPJ,它看起来像:

$cnpj = $xmldata->CTe->infCte->emit->CNPJ;


推荐阅读