2017-09-05 85 views
0

I 有問題。我需要將XML的特定標籤移動到另一個標籤,但我需要在移動時清除此標籤。使用XSLT將特定標籤移動到不同的位置

具體而言,我需要移動以下標記和您的內容<ns1:eSocial xmlns:ns1="http://www.esocial.gov.br/schema/evt/evtTabEstab/v02_03_00">,並將其放在此標記<ns0:evento Id=""/>內。

像這樣:

<ns0:evento Id=""> 
<ns1:eSocial xmlns:ns1="http://www.esocial.gov.br/schema/evt/evtTabEstab/v02_03_00"> 
. 
. 
. 
</ns1:eSocial> 
</ns0:evento> 

請參見下面的XML:

<?xml version="1.0" encoding="UTF-8"?> 
    <ns0:eSocial xmlns:ns0="http://www.esocial.gov.br/schema/lote/eventos/envio/v1_1_1"> 
     <ns0:envioLoteEventos grupo=""> 
      <ns0:ideEmpregador> 
      <ns0:tpInsc/> 
      <ns0:nrInsc/> 
      </ns0:ideEmpregador> 
      <ns0:ideTransmissor> 
      <ns0:tpInsc/> 
      <ns0:nrInsc/> 
      </ns0:ideTransmissor> 
      <ns0:eventos> 
      <ns0:evento Id=""/> 
      <ns1:eSocial xmlns:ns1="http://www.esocial.gov.br/schema/evt/evtTabEstab/v02_03_00"> 
       <ns1:evtTabEstab Id=""> 
        <ns1:ideEvento> 
         <ns1:tpAmb/> 
         <ns1:procEmi/> 
         <ns1:verProc/> 
        </ns1:ideEvento> 
        <ns1:ideEmpregador> 
         <ns1:tpInsc/> 
         <ns1:nrInsc/> 
        </ns1:ideEmpregador> 
        <ns1:infoEstab> 
         <ns1:inclusao> 
         <ns1:ideEstab> 
          <ns1:tpInsc/> 
          <ns1:nrInsc/> 
          <ns1:iniValid/> 
          <ns1:fimValid/> 
         </ns1:ideEstab> 
         <ns1:dadosEstab> 
          <ns1:cnaePrep/> 
          <ns1:aliqGilrat> 
           <ns1:aliqRat/> 
           <ns1:fap/> 
           <ns1:aliqRatAjust/> 
           <ns1:procAdmJudRat> 
            <ns1:tpProc/> 
            <ns1:nrProc/> 
            <ns1:codSusp/> 
           </ns1:procAdmJudRat> 
           <ns1:procAdmJudFap> 
            <ns1:tpProc/> 
            <ns1:nrProc/> 
            <ns1:codSusp/> 
           </ns1:procAdmJudFap> 
          </ns1:aliqGilrat> 
          <ns1:infoCaepf> 
           <ns1:tpCaepf/> 
          </ns1:infoCaepf> 
          <ns1:infoObra> 
           <ns1:indSubstPatrObra/> 
          </ns1:infoObra> 
          <ns1:infoTrab> 
           <ns1:regPt/> 
           <ns1:infoApr> 
            <ns1:contApr/> 
            <ns1:nrProcJud/> 
            <ns1:contEntEd/> 
            <ns1:infoEntEduc> 
            <ns1:nrInsc/> 
            </ns1:infoEntEduc> 
           </ns1:infoApr> 
           <ns1:infoPCD> 
            <ns1:contPCD/> 
            <ns1:nrProcJud/> 
           </ns1:infoPCD> 
          </ns1:infoTrab> 
         </ns1:dadosEstab> 
         </ns1:inclusao> 
         <ns1:alteracao> 
         <ns1:ideEstab> 
          <ns1:tpInsc/> 
          <ns1:nrInsc/> 
          <ns1:iniValid/> 
          <ns1:fimValid/> 
         </ns1:ideEstab> 
         <ns1:dadosEstab> 
          <ns1:cnaePrep/> 
          <ns1:aliqGilrat> 
           <ns1:aliqRat/> 
           <ns1:fap/> 
           <ns1:aliqRatAjust/> 
           <ns1:procAdmJudRat> 
            <ns1:tpProc/> 
            <ns1:nrProc/> 
            <ns1:codSusp/> 
           </ns1:procAdmJudRat> 
           <ns1:procAdmJudFap> 
            <ns1:tpProc/> 
            <ns1:nrProc/> 
            <ns1:codSusp/> 
           </ns1:procAdmJudFap> 
          </ns1:aliqGilrat> 
          <ns1:infoCaepf> 
           <ns1:tpCaepf/> 
          </ns1:infoCaepf> 
          <ns1:infoObra> 
           <ns1:indSubstPatrObra/> 
          </ns1:infoObra> 
          <ns1:infoTrab> 
           <ns1:regPt/> 
           <ns1:infoApr> 
            <ns1:contApr/> 
            <ns1:nrProcJud/> 
            <ns1:contEntEd/> 
            <ns1:infoEntEduc> 
            <ns1:nrInsc/> 
            </ns1:infoEntEduc> 
           </ns1:infoApr> 
           <ns1:infoPCD> 
            <ns1:contPCD/> 
            <ns1:nrProcJud/> 
           </ns1:infoPCD> 
          </ns1:infoTrab> 
         </ns1:dadosEstab> 
         <ns1:novaValidade> 
          <ns1:iniValid/> 
          <ns1:fimValid/> 
         </ns1:novaValidade> 
         </ns1:alteracao> 
         <ns1:exclusao> 
         <ns1:ideEstab> 
          <ns1:tpInsc/> 
          <ns1:nrInsc/> 
          <ns1:iniValid/> 
          <ns1:fimValid/> 
         </ns1:ideEstab> 
         </ns1:exclusao> 
        </ns1:infoEstab> 
       </ns1:evtTabEstab> 
       <ns2:Signature Id="" xmlns:ns2="http://www.w3.org/2000/09/xmldsig#"> 
        <ns2:SignedInfo Id=""> 
         <ns2:CanonicalizationMethod Algorithm=""/> 
         <ns2:SignatureMethod Algorithm=""> 
         <ns2:HMACOutputLength/> 
         </ns2:SignatureMethod> 
         <ns2:Reference Id="" URI="" Type=""> 
         <ns2:Transforms> 
          <ns2:Transform Algorithm=""> 
           <ns2:XPath/> 
          </ns2:Transform> 
         </ns2:Transforms> 
         <ns2:DigestMethod Algorithm=""/> 
         <ns2:DigestValue/> 
         </ns2:Reference> 
        </ns2:SignedInfo> 
        <ns2:SignatureValue Id=""/> 
        <ns2:KeyInfo Id=""> 
         <ns2:KeyName/> 
         <ns2:KeyValue> 
         <ns2:DSAKeyValue> 
          <ns2:P/> 
          <ns2:Q/> 
          <ns2:G/> 
          <ns2:Y/> 
          <ns2:J/> 
          <ns2:Seed/> 
          <ns2:PgenCounter/> 
         </ns2:DSAKeyValue> 
         <ns2:RSAKeyValue> 
          <ns2:Modulus/> 
          <ns2:Exponent/> 
         </ns2:RSAKeyValue> 
         </ns2:KeyValue> 
         <ns2:RetrievalMethod URI="" Type=""> 
         <ns2:Transforms> 
          <ns2:Transform Algorithm=""> 
           <ns2:XPath/> 
          </ns2:Transform> 
         </ns2:Transforms> 
         </ns2:RetrievalMethod> 
         <ns2:X509Data> 
         <ns2:X509IssuerSerial> 
          <ns2:X509IssuerName/> 
          <ns2:X509SerialNumber/> 
         </ns2:X509IssuerSerial> 
         <ns2:X509SKI/> 
         <ns2:X509SubjectName/> 
         <ns2:X509Certificate/> 
         <ns2:X509CRL/> 
         </ns2:X509Data> 
         <ns2:PGPData> 
         <ns2:PGPKeyID/> 
         <ns2:PGPKeyPacket/> 
         </ns2:PGPData> 
         <ns2:SPKIData> 
         <ns2:SPKISexp/> 
         </ns2:SPKIData> 
         <ns2:MgmtData/> 
        </ns2:KeyInfo> 
        <ns2:Object Id="" MimeType="" Encoding=""/> 
       </ns2:Signature> 
      </ns1:eSocial> 
      </ns0:eventos> 
     </ns0:envioLoteEventos> 
    </ns0:eSocial> 

有人幫幫我嗎?我不知道如何創建XSLT。

回答

0

這XSLT的1.0模板將所有ns1:eSocial元素<ns0:evento Id="">元素:

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:ns0="http://www.esocial.gov.br/schema/lote/eventos/envio/v1_1_1" 
    xmlns:ns1="http://www.esocial.gov.br/schema/evt/evtTabEstab/v02_03_00" 
    version="1.0"> 

    <xsl:output method="xml" encoding="UTF-8" /> 

    <!-- identity template --> 
    <xsl:template match="node()|@*"> 
     <xsl:copy> 
     <xsl:apply-templates select="node()|@*" /> 
     </xsl:copy> 
    </xsl:template>  

    <xsl:template match="ns1:eSocial"> 
     <ns0:evento Id=""> 
     <xsl:copy> 
      <xsl:apply-templates /> 
     </xsl:copy> 
     </ns0:evento> 
    </xsl:template> 

</xsl:stylesheet> 

如果這是你想要的...

+0

還有一個問題,我可以動態編輯標籤的字段Id =「」嗎? 無論如何,非常感謝你們的幫助。 –

+0

對不起,我的意思是動態填充該字段。 –

+0

當然,例如< xsl:apply-templates select =「node()」/>' – CoDEmanX

0

您可以匹配ns0:evento,其屬性和節點應用模板(在至少本身,但它也將保持子節點,如果有的話),並將相鄰的ns1:eSocial節點複製爲ns0:evento的子節點。

ns1:eSocial與空模板匹配以將其壓縮在文檔樹中的原始位置。

<?xml version="1.0" encoding="utf-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:ns0="http://www.esocial.gov.br/schema/lote/eventos/envio/v1_1_1" 
    xmlns:ns1="http://www.esocial.gov.br/schema/evt/evtTabEstab/v02_03_00" 
> 
    <xsl:output method="xml" indent="yes"/> 
    <xsl:strip-space elements="*"/> 

    <xsl:template match="@* | node()"> 
    <xsl:copy> 
     <xsl:apply-templates select="@* | node()"/> 
    </xsl:copy> 
    </xsl:template> 

    <xsl:template match="ns0:evento"> 
    <xsl:apply-templates select="@* | node()"/> 
    <xsl:copy-of select="../ns1:eSocial"/> 
    </xsl:template> 

    <xsl:template match="ns1:eSocial"/> 

</xsl:stylesheet> 
+0

非常感謝您的幫助 –

相關問題