XMLT 샘플에서는 XMLTransformation 노드 및 XSL 스타일시트를 사용하여 XML 메시지를 변환하는 방법을 보여줍니다.
XML 변환에 사용되는 스타일시트의 위치를 여러 방식으로 지정할 수 있습니다.
이 샘플에 사용된 스타일시트는 다음과 같습니다.
<?xml version="1.0" encoding="ISO-8859-1"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> <SaleEnvelope> <xsl:for-each select="/SaleEnvelope/SaleList"> <SaleList> <xsl:for-each select="Invoice"> <xsl:if test="not(contains(Surname,'Shop'))"> <Statement> <xsl:attribute name="Type">Monthly</xsl:attribute> <xsl:attribute name="Style">Full</xsl:attribute> <Customer> <Initials> <xsl:for-each select="Initial"> <xsl:value-of select="."/> </xsl:for-each> </Initials> <Name><xsl:value-of select="Surname"/></Name> <Balance><xsl:value-of select="Balance"/></Balance> </Customer> <Purchases> <xsl:for-each select="Item"> <Article> <Desc><xsl:value-of select="Description"/></Desc> <Cost><xsl:value-of select='format-number((number(Price)*1.6),"####.##")'/></Cost> <Qty><xsl:value-of select="Quantity"/></Qty> </Article> </xsl:for-each> </Purchases> <Amount> <xsl:attribute name="Currency"> <xsl:value-of select="Currency" /> </xsl:attribute> <xsl:call-template name="sumSales"> <xsl:with-param name="list" select="Item"/> </xsl:call-template> </Amount> </Statement> </xsl:if> </xsl:for-each> </SaleList> </xsl:for-each> </SaleEnvelope> </xsl:template> <xsl:template name="sumSales"> <xsl:param name="list" /> <xsl:param name="result" select="0"/> <xsl:choose> <xsl:when test="$list"> <xsl:call-template name="sumSales"> <xsl:with-param name="list" select="$list[position()!=1]"/> <xsl:with-param name="result" select="$result + number($list[1]/Price)*number($list[1]/Quantity)*1.6"/> </xsl:call-template> </xsl:when> <xsl:otherwise> <xsl:value-of select='format-number(number($result),"####.##")'/> </xsl:otherwise> </xsl:choose> </xsl:template> </xsl:stylesheet>
이 스타일시트는 다음 XML 메시지(XMLT_sample_msg.enqueue에서 제공됨)를 변환하는 데 사용됩니다.
<SaleEnvelope> <Header> <SaleListCount>1</SaleListCount> </Header> <SaleList> <Invoice> <Initial>K</Initial> <Initial>A</Initial> <Surname>Braithwaite</Surname> <Item> <Code>00</Code> <Code>01</Code> <Code>02</Code> <Description>Twister</Description> <Category>Games</Category> <Price>00.30</Price> <Quantity>01</Quantity> </Item> <Item> <Code>02</Code> <Code>03</Code> <Code>01</Code> <Description>The Times Newspaper</Description> <Category>Books and Media</Category> <Price>00.20</Price> <Quantity>01</Quantity> </Item> <Balance>00.50</Balance> <Currency>Sterling</Currency> </Invoice> <Invoice> <Initial>T</Initial> <Initial>J</Initial> <Surname>Dunnwin</Surname> <Item> <Code>04</Code> <Code>05</Code> <Code>01</Code> <Description>The Origin of Species</Description> <Category>Books and Media</Category> <Price>22.34</Price> <Quantity>02</Quantity> </Item> <Item> <Code>06</Code> <Code>07</Code> <Code>01</Code> <Description>Microscope</Description> <Category>Miscellaneous</Category> <Price>36.20</Price> <Quantity>01</Quantity> </Item> <Balance>81.84</Balance> <Currency>Euros</Currency> </Invoice> </SaleList> <Trailer> <CompletionTime>12.00.00</CompletionTime> </Trailer> </SaleEnvelope>
다음 다이어그램은 XML 메시지를 변환하는 데 사용되는 메시지 플로우를 보여줍니다. 보다 자세한 정보는 메시지 플로우 편집기에서 XMLT_Sample_flow.msgflow를 열고 각 노드를 살펴보십시오.