2017-09-05 78 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

非常感谢您的帮助 –

相关问题