2014-02-05 27 views
0

我試圖在J Developer中映射兩個XSD以生成一個轉換(XSLT)。使用JDeveloper的XSLT檢查源中的條件

我的問題

在我source XSD我要檢查一個condition讓說,如果idNumberType =10然後我不得不map PAN Number(in source XSD) to InIdNum(In Target XSD)。如果idNumberType =4那麼我必須map Passport number(in source XSD) to InIdNum(In Target XSD)

任何建議/意見/編輯將歡迎。

在此先感謝。

回答

0

我認爲你正在尋找一個基本的條件處理使用xsl:choose。下面的XSLT:

<?xml version="1.0" encoding="utf-8"?> 
<xsl:stylesheet 
     xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
     version="1.0"> 

    <xsl:output method="xml" indent="yes"/> 

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

    <xsl:template match="person"> 
     <person> 
     <InIdNum> 
      <xsl:choose> 
       <xsl:when test="idNumberType='10'"> 
        <xsl:value-of select="panNumber"/> 
       </xsl:when> 
       <xsl:when test="idNumberType='4'"> 
        <xsl:value-of select="passportNumber"/> 
       </xsl:when> 
       <xsl:otherwise> 
        <xsl:text>???</xsl:text> 
       </xsl:otherwise> 
      </xsl:choose> 
     </InIdNum> 
     </person> 
    </xsl:template> 
</xsl:stylesheet> 

當這個輸出應用到該輸入XML

<xml> 
    <person> 
     <idNumberType>10</idNumberType> 
     <panNumber>Pan1234</panNumber> 
     <passportNumber>Pass1234</passportNumber> 
    </person> 
    <person> 
     <idNumberType>4</idNumberType> 
     <panNumber>Pan9876</panNumber> 
     <passportNumber>Pass9876</passportNumber> 
    </person> 
    <person> 
     <idNumberType>53</idNumberType> 
     <panNumber>Pan53</panNumber> 
     <passportNumber>Pass53</passportNumber> 
    </person> 
</xml> 

結果:

<?xml version="1.0" encoding="utf-8"?> 
<xml> 
    <person><InIdNum>Pan1234</InIdNum></person> 
    <person><InIdNum>Pass9876</InIdNum></person> 
    <person><InIdNum>???</InIdNum></person> 
</xml> 

更換身份模板與任何你需要的其餘部分做該文件。