2017-09-12 62 views
0

我试图在XSLT 1.0中实现此条件并且以下是条件 在任何时间点,ADT的出现次数多于INF One ADT应该只出现的次数INF标签的一个姓氏,名字和出生日期详细信息 如果ADT标签多于INF标签,则应将第一个ADT标签标记为INF,并且如果ADT标签不应附带任何INF标签,则应予以休息。不需要更改子标签,但它应该出现在输出中。当使用XSLT循环中的条件匹配时向元素添加元素

我试图使用XSLT实现下面的输出,但不能完全解决它,任何帮助,将不胜感激。

需要帮助下面XSLT转化

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:template match="/"> 
     <travelerGroup> 
      <xsl:for-each select="/travelerGroup/traveler"> 
       <xsl:if test="travelerInfo/travelerTypeCode != 'INF' "> 
        <traveler> 
         <travelerInfo> 
          <elementNumber> 
           <xsl:value-of select="travelerInfo/elementNumber" /> 
          </elementNumber> 
          <travelerTypeCode> 
           <xsl:value-of select="travelerInfo/travelerTypeCode" /> 
          </travelerTypeCode> 
          <travelerDetails> 
           <firstName> 
            <xsl:value-of select="concat(travelerInfo/travelerDetails/firstName" /> 
           </firstName> 
           <surname> 
            <xsl:value-of select="travelerInfo/travelerDetails/surname" /> 
           </surname> 
           <xsl:if test="travelerInfo/travelerTypeCode = 'CHD' "> 
            <dateOfBirth> 
             <xsl:value-of select="travelerInfo/travelerDetails/dateOfBirth" /> 
            </dateOfBirth> 
           </xsl:if> 
          </travelerDetails> 
          <xsl:if test="travelerInfo/travelerTypeCode != 'CHD' "> 
           <xsl:variable name="i" select="position()" /> 
           <xsl:for-each select="/traveler[travelerInfo/travelerTypeCode = 'INF'][$i]"> 
            <xsl:if test="travelerInfo/travelerTypeCode = 'INF' "> 
             <infant> 
              <surname> 
               <xsl:value-of select="travelerInfo/travelerDetails/surname" /> 
              </surname> 
              <firstName> 
               <xsl:value-of select="travelerInfo/travelerDetails/firstName" /> 
              </firstName> 
              <dateOfBirth> 
               <xsl:value-of select="travelerInfo/travelerDetails/dateOfBirth" /> 
              </dateOfBirth> 
             </infant> 
            </xsl:if> 
           </xsl:for-each> 
          </xsl:if> 
         </travelerInfo> 
        </traveler> 
       </xsl:if> 
      </xsl:for-each> 
     </travelerGroup> 
    </xsl:template> 
</xsl:stylesheet> 

输入XML:

<travelerGroup> 
<traveler> 
    <travelerInfo> 
     <elementNumber>1</elementNumber> 
     <travelerTypeCode>ADT</travelerTypeCode> 
     <travelerDetails> 
      <firstName>Adult One</firstName> 
      <surname>Surname</surname> 
     </travelerDetails> 
    </travelerInfo> 
</traveler> 
<traveler> 
    <travelerInfo> 
     <elementNumber>2</elementNumber> 
     <travelerTypeCode>ADT</travelerTypeCode> 
     <travelerDetails> 
      <firstName>Adult Two</firstName> 
      <surname>Surname</surname> 
     </travelerDetails> 
    </travelerInfo> 
</traveler> 
<traveler> 
    <travelerInfo> 
     <travelerTypeCode>INF</travelerTypeCode> 
     <elementNumber>3</elementNumber> 
     <travelerDetails> 
      <firstName>Infant One</firstName> 
      <surname>Surname</surname> 
      <dateOfBirth>2016-01-06</dateOfBirth> 
     </travelerDetails> 
    </travelerInfo> 
</traveler> 
<traveler> 
    <travelerInfo> 
     <travelerTypeCode>INF</travelerTypeCode> 
     <elementNumber>4</elementNumber> 
     <travelerDetails> 
      <firstName>Infant Two</firstName> 
      <surname>Surname</surname> 
      <dateOfBirth>2017-01-06</dateOfBirth> 
     </travelerDetails> 
    </travelerInfo> 
</traveler> 
<traveler> 
    <travelerInfo> 
     <elementNumber>5</elementNumber> 
     <travelerTypeCode>ADT</travelerTypeCode> 
     <travelerDetails> 
      <firstName>Adult Three</firstName> 
      <surname>Surname</surname> 
     </travelerDetails> 
    </travelerInfo> 
</traveler> 
<traveler> 
    <travelerInfo> 
     <elementNumber>6</elementNumber> 
     <travelerTypeCode>CHD</travelerTypeCode> 
     <travelerDetails> 
      <firstName>Child One</firstName> 
      <surname>Surname</surname> 
      <dateOfBirth>2013-01-06</dateOfBirth> 
     </travelerDetails> 
    </travelerInfo> 
</traveler> 
</travelerGroup> 

预期输出:

<travelerGroup> 
<traveler> 
    <elementNumber>1</elementNumber> 
    <travelerTypeCode>ADT</travelerTypeCode> 
    <travelerDetails> 
     <firstName>Adult One</firstName> 
     <surname>Surname</surname> 
     <middleName /> 
    </travelerDetails> 
    <infant> 
     <surname>Infant One</surname> 
     <firstName>Surname</firstName> 
     <dateOfBirth>2016-01-06</dateOfBirth> 
    </infant> 
</traveler> 
<traveler> 
    <elementNumber>2</elementNumber> 
    <travelerTypeCode>ADT</travelerTypeCode> 
    <travelerDetails> 
     <firstName>Adult Two</firstName> 
     <surname>Surname</surname> 
     <middleName /> 
    </travelerDetails> 
    <infant> 
     <surname>Infant Two</surname> 
     <firstName>Surname</firstName> 
     <dateOfBirth>2017-01-06</dateOfBirth> 
    </infant> 
</traveler> 
<traveler> 
    <elementNumber>5</elementNumber> 
    <travelerTypeCode>ADT</travelerTypeCode> 
    <travelerDetails> 
     <firstName>Adult Three</firstName> 
     <surname>Surname</surname> 
     <middleName /> 
    </travelerDetails> 
</traveler> 
<traveler> 
    <elementNumber>6</elementNumber> 
    <travelerTypeCode>CHD</travelerTypeCode> 
    <travelerDetails> 
     <firstName>Child One</firstName> 
     <surname>Surname</surname> 
     <dateOfBirth>2013-01-06</dateOfBirth> 
    </travelerDetails> 
</traveler> 
</travelerGroup> 

回答