使用JDeveloper的XSLT检查源中的条件

时间:2014-02-05 10:08:52

标签: java xml xslt xsd jdeveloper

我正在尝试在J Developer中映射两个XSD来生成转换(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)

任何建议/意见/修改都将受到欢迎。

提前致谢。

1 个答案:

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

将身份模板替换为您需要对文档的其余部分执行的操作。