fonctionnalité de fusion des deux fichiers XSL en un seul fichier (suite de mon précédent Q est ...)

StackOverflow https://stackoverflow.com/questions/4669156

Question

Ceci est dans la continuité de mes questions précédentes (désolé pour Réaffectation nouveau type de question similaire):

la fonctionnalité de fusion des deux fichiers XSL en un seul fichier (non une importation xsl ou inclure l'émission)

et

fonctionnalité de fusion des deux fichiers xsl dans un seul fichier (suite .....)

Il est en fait une manipulation de bits de ma deuxième question. Je maintenant besoin de fusionner la solution fournie par Flack à ma première question avec une condition "choisir" dans mon xsl:

<xsl:choose>
          <xsl:when test='/Declaration/Header/DeclarantsReference = ""'>
            <DeclarantsReference>
              <xsl:text disable-output-escaping="no">A</xsl:text>
            </DeclarantsReference>
          </xsl:when>
          <xsl:otherwise>
            <DeclarantsReference>
              <xsl:value-of select="/Declaration/Header/DeclarantsReference"/>
            </DeclarantsReference>
          </xsl:otherwise>
        </xsl:choose>

Maintenant tout échantillon d'entrée xml comme:

    <Declaration>
         <Message>
            <Meduim>#+#</Meduim>
            <CommonAccessReference></CommonAccessReference>
         </Message>
         <BeginingOfMessage>
            <MessageCode>5</MessageCode>
            <DeclarationCurrency></DeclarationCurrency>
            <MessageFunction>ISD</MessageFunction>
         </BeginingOfMessage>
         <Header>
            <DeclarantsReference></DeclarantsReference>
            <Items>
            <Documents>
                  <ItemDocument>
                     <DocumentCode>XXX</DocumentCode>
                     <DocumentPart></DocumentPart>
                     <DocumentLanguage>#+#</DocumentLanguage>
                  </ItemDocument>
               </Documents>
            </Items>
           </Header>
</Declaration>

devrait afficher:

<Declaration>
 <Message>
  <Meduim></Meduim>
 </Message>
 <BeginingOfMessage>
  <MessageCode>5</MessageCode>
  <MessageFunction>ISD</MessageFunction>
 </BeginingOfMessage>
 <Header>
 <DeclarantsReference>A</DeclarantsReference>
  <Items>
   <Documents>
    <ItemDocument>
     <DocumentCode>XXX</DocumentCode>
     <DocumentLanguage></DocumentLanguage>
    </ItemDocument>
   </Documents>
  </Items>
 </Header>
</Declaration>

Merci pour toute aide à l'avance.

Était-ce utile?

La solution

Cette feuille de style:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="@* | node()">
        <xsl:copy>
            <xsl:apply-templates select="@* | node()"/>
        </xsl:copy>
    </xsl:template>
    <xsl:template match="*[not(node())]"/>
    <xsl:template match="text()" name="strip">
        <xsl:param name="pString" select="."/>
        <xsl:param name="pOutput" select="substring-before($pString,'#+#')"/>
        <xsl:choose>
            <xsl:when test="contains($pString,'#+#')">
                <xsl:call-template name="strip">
                    <xsl:with-param name="pString"
                                    select="substring-after($pString,'#+#')"/>
                    <xsl:with-param name="pOutput"
                                    select="concat($pOutput,
                                                   substring-before($pString,
                                                                    '#+#'))"/>
                </xsl:call-template>
            </xsl:when>
            <xsl:otherwise>
                <xsl:value-of select="concat($pOutput,$pString)"/>
            </xsl:otherwise>
        </xsl:choose>
    </xsl:template>
    <xsl:template match="DeclarantsReference[not(node())]"
                  priority="1">
        <xsl:copy>A</xsl:copy>
    </xsl:template>
</xsl:stylesheet>

Sortie:

<Declaration>
    <Message>
        <Meduim></Meduim>
    </Message>
    <BeginingOfMessage>
        <MessageCode>5</MessageCode>
        <MessageFunction>ISD</MessageFunction>
    </BeginingOfMessage>
    <Header>
        <DeclarantsReference>A</DeclarantsReference>
        <Items>
            <Documents>
                <ItemDocument>
                    <DocumentCode>XXX</DocumentCode>
                    <DocumentLanguage></DocumentLanguage>
                </ItemDocument>
            </Documents>
        </Items>
    </Header>
</Declaration>

Remarque :. Les règles de la règle d'écraser l'identité

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top