2011-01-12 18 views
0

這是我以前的問題延續(對不起,再發布相似類型的問題再次):合併功能集成到一個單一的文件(我以前的Q的延續......)

Merge functionality of two xsl files into a single file (not a xsl import or include issue)

Merge functionality of two xsl files into a single file (continued.....)

其實,這是我的第二個問題的位操作。 我現在需要通過提供弗萊克我的第一個問題的解決方案以「選擇」的情況在我的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> 

現在,任何一個樣本XML輸入,如:

<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> 

應該輸出:

<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> 

感謝您的任何幫助提前。

+0

因爲你沒有選擇正確的解決方案(流水線),你(並將在未來不斷)遇到新問題。您的代碼將越來越多,具有類似意大利麪的外觀,可維護性將不斷惡化。現在回到早期給予您的流水線解決方案還不遲。讓這是一個很好的教訓。 – 2011-01-12 14:18:21

回答

0

這個樣式表:

<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> 

輸出:

<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> 

注意:規則重寫身份規則。

相關問題