使用XSLT将特定标记移动到其他位置

时间:2017-09-05 15:20:35

标签: xml xslt

我      有一个问题。我需要将XML的特定标记移动到另一个标记,但是当我移动它时我需要清除此标记。

具体来说,我需要移动以下标记和您的内容<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。

2 个答案:

答案 0 :(得分: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>

如果这就是你想要的......

答案 1 :(得分:0)

您可以匹配ns0:evento,为其属性和节点应用模板(至少本身,但如果有的话,还会保留子节点)并将相邻的ns1:eSocial节点复制为{的子节点{1}}。

ns0:evento也与空模板匹配,以将其压缩到文档树中的原始位置。

ns1:eSocial