Я работал над некоторым кодом о том, как отображать или выводить строку / код с разделителем в виде строки, который вставляется в цикл. Глядя на часть XML, узел имеет три значения <vb:ecodewithamt>
. Проблема в том, что я не могу показать другие значения <vb:ecodewithamt>
, когда пытаюсь его запустить. Также после того, как я получу слово / код с подстрокой, я преобразую их в эквивалентный 'Enumcode', когда это AAA, должно быть = 3, если BBB должно быть = 6 и если CCC = 7. Я успешно получил преобразование <vb:ABase>
и <vb:AcBase>
, то есть 'Enumcode' 1 и 2 соответственно. Заранее спасибо!
Вот мой XSLT-код, я пробовал это решение / код
<? xml version='1.0' encoding='UTF-8' ?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XSL/XMLSchema" exclude-result-prefixes="xs" version="2.0"
xmlns:vb="urn:com.vb/pfile"
xmlns:xsi="http://www.w3.org/2001/XSL/XMLSchema-instance" >
<xsl:output method="text" />
<xsl:template match="/" />
<!-- LineBreak and Delimiter -->
<xsl:variable select="'
'" name="LINE_FEED"/>
<xsl:variable select="'|'" name="PIPE"/>
<!-- Enum codes -->
<xsl:variable select="'1'" name="Enumcode1"/>
<xsl:variable select="'2'" name="Enumcode2"/>
<xsl:variable select="'3'" name="Enumcode3"/>
<xsl:variable select="'6'" name="Enumcode6"/>
<xsl:variable select="'7'" name="Enumcode7"/>
<!-- This is the header -->
<xsl:text>EMPID</xsl:text>
<xsl:value-of select ="$PIPE"/>
<xsl:text>EPtypeID</xsl:text>
<xsl:value-of select ="$PIPE"/>
<xsl:text>EPAmt</xsl:text>
<xsl:value-of select ="$PIPE"/>
<xsl:text>EPPeriod</xsl:text>
<xsl:value-of select ="$PIPE"/>
<xsl:text>CurrID</xsl:text>
<xsl:value-of select ="$PIPE"/>
<xsl:value-of select ="$LINE_FEED"/>
<xsl:variable select="vb:EMPID" name="EmployeeID"/>
<xsl:variable select="vb:work_group/vb:ABase" name="AnBase"/>
<xsl:variable select="vb:work_group/vb:AcBase" name="AccBase"/>
<xsl:variable select="vb:work_group/vb:PPeriod" name="PayPd"/>
<xsl:variable select="vb:work_group/vb:Currency/vb:ID[@vb:type='Currency_ID']" name="CurrencyID"/>
<xsl:if test="$AnBase != ' '">
<EMPLID>
<xsl:value-of select ="$EmployeeID"/>
</EMPLID>
<xsl:value-of select ="$PIPE"/>
<EARN1>
<xsl:value-of select ="$Enumcode1"/>
</EARN1>
<xsl:value-of select ="$PIPE"/>
<Amount>
<xsl:value-of select ="$AnBase"/>
</Amount>
<xsl:value-of select ="$PIPE"/>
<PayPeriod>
<xsl:value-of select ="$PayPd"/>
</PayPeriod>
<xsl:value-of select ="$PIPE"/>
<Currency>
<xsl:value-of select ="$CurrencyID"/>
</Currency>
<xsl:value-of select ="$LINE_FEED"/>
</xsl:if>
<xsl:if test="$AccBase != ' '">
<EMPLID>
<xsl:value-of select ="$EmployeeID"/>
</EMPLID>
<xsl:value-of select ="$PIPE"/>
<EARN1>
<xsl:value-of select ="$Enumcode1"/>
</EARN1>
<xsl:value-of select ="$PIPE"/>
<Amount>
<xsl:value-of select ="$AccBase"/>
</Amount>
<xsl:value-of select ="$PIPE"/>
<PayPeriod>
<xsl:value-of select ="$PayPd"/>
</PayPeriod>
<xsl:value-of select ="$PIPE"/>
<Currency>
<xsl:value-of select ="$CurrencyID"/>
</Currency>
<xsl:value-of select ="$LINE_FEED"/>
</xsl:if>
<xsl:for-each select"vb:earn_group">
<EMPLID>
<xsl:value-of select ="$EmployeeID"/>
</EMPLID>
<!-- Here is the part of my substring -->
<EARN1>
<xsl:choose>
<xsl:when test="substring(vb:ecodewithamt,1,3 = 'AAA' ">
<xsl:value-of select ="$Enumcode3"/>
</xsl:when>
<xsl:when test="substring(vb:ecodewithamt,1,3 = 'BBB' ">
<xsl:value-of select ="$Enumcode6"/>
</xsl:when>
<xsl:when test="substring(vb:ecodewithamt,1,3 = 'CCC' ">
<xsl:value-of select ="$Enumcode7"/>
</xsl:when>
<xsl:otherwise>
<xsl:text></xsl:text>
</xsl:otherwise>
</EARN1>
<!-- End of substring -->
<PayPeriod>
<xsl:value-of select ="$PayPd"/>
</PayPeriod>
<xsl:value-of select ="$PIPE"/>
<Currency>
<xsl:value-of select ="$CurrencyID"/>
</Currency>
<xsl:value-of select ="$LINE_FEED"/>
</xsl:for-each>
</xsl:for-each>
<xsl:stylesheet>
Вот пример XML:
<? xml version='1.0' encoding='UTF-8' ?>
<vb:Report_info xmlns:vb="urn:com.vb/pfile">
<vb:Report_start>
<vb:EMPID>1111</vb:EMPID>
<vb:work_group>
<vb:ABase>3333</vb:ABase>
<vb:AcBase>2222</vb:AcBase>
<vb:PPeriod>AY</vb:PPeriod>
<vb:Currency vb:Descriptor="XXX">
<vb:ID vb:type="Currency_ID">XXX</vb:ID>
</vb:Currency>
</vb:work_group>
<vb:earn_group>
<vb:ecodewithamt>AAA|9999</vb:ecodewithamt>
<vb:ecodewithamt>BBB|8888</vb:ecodewithamt>
<vb:ecodewithamt>CCC|7777</vb:ecodewithamt>
</vb:earn_group>
</vb:Report_start>
</vb:Report_info>
Я получаю:
EMPID|EPtypeID|EPAmt|EPPeriod|CurrID
1111|1|3333|AY|XXX
1111|2|2222|AY|XXX
1111|3
Вывод должен быть:
1111|1|3333|AY|XXX
1111|2|2222|AY|XXX
1111|3|9999|AY|XXX
1111|6|8888|AY|XXX
1111|7|7777|AY|XXX