У меня есть таблица поиска из этой таблицы, мы берем результат, если customeritemcode = substring (поле [@ id = '0'], 11,3), тогда подсемейство = подсемейство из таблицы поиска, в противном случае '9':
<lookup>
<Code>
<BuyerItemCode>439</BuyerItemCode>
<Subfamily>016</Subfamily>
</Code>
</lookup>
XML-файл выглядит так:
<document>
<line id="14">
<field id="0"><![CDATA[MMM4443 419280600000]]></field>
</line>
<line id="15">
<field id="0"><![CDATA[MMM4443 414390600000]]></field>
</line>
</document>
Мне нужно сравнить эти данные с lookup.xml, и если данные не сравниваются, вставьте константу 9. С altova v11 моя программа работает, с cooktop нет, яПодлое сравнение ложно.Моя программа выглядит так:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:date="http://exslt.org/dates-and-times" xmlns:exsl="http://exslt.org/common" extension-element-prefixes="date exsl">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:key name="ProdSubfamily" match="Subfamily" use="../BuyerItemCode"/>
<xsl:template match="/">
<Interchange>
<Group>
<Message>
<xsl:if test="/document/line[(substring(field[@id='0'], 1,3)='MMM')]">
<xsl:apply-templates mode="MMM" select="/document"/>
</xsl:if>
</Message>
</Group>
</Interchange>
</xsl:template>
<xsl:template mode="MMM" match="/document">
<PriceCatalogue-Lines>
<xsl:for-each select="/document/line[contains(substring(field[@id='0'], 1,3),'MMM') and not(contains(substring(field[@id='0'],9,1),'0'))]">
<xsl:variable name="inputProd" select="substring(field[@id='0'], 11,3)"/>
<Line>
<Line-Item>
<LineNumber>
<xsl:value-of select="position()"/>
</LineNumber>
<BuyerItemCode>
<xsl:value-of select="substring(field[@id='0'], 11,3)"/>
</BuyerItemCode>
<SubFamily>
<xsl:choose>
<xsl:when test="substring(field[@id='0'], 11,3) = document('lookup.xml')/*/*/BuyerItemCode">
<xsl:for-each select="document('lookup.xml')">
<xsl:for-each select="key('ProdSubfamily',$inputProd)">
<xsl:value-of select="."/>
</xsl:for-each>
</xsl:for-each>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="'9'"/>
</xsl:otherwise>
</xsl:choose>
</SubFamily>
</Line-Item>
</Line>
</xsl:for-each>
</PriceCatalogue-Lines>
</xsl:template>
</xsl:stylesheet>
Правильный результат, который я получаю с помощью Altova, и я хочу получить этот результат с помощью cooktop:
<Interchange>
<Group>
<Message>
<PriceCatalogue-Lines>
<Line>
<Line-Item>
<LineNumber>1</LineNumber>
<BuyerItemCode>928</BuyerItemCode>
<SubFamily>9</SubFamily>
</Line-Item>
</Line>
<Line>
<Line-Item>
<LineNumber>2</LineNumber>
<BuyerItemCode>439</BuyerItemCode>
<SubFamily>016</SubFamily>
</Line-Item>
</Line>
</PriceCatalogue-Lines>
</Message>
</Group>
</Interchange>
ПЛОХОЙ результат, который я получаю с помощью Cooktop:
<Interchange>
<Group>
<Message>
<PriceCatalogue-Lines>
<Line>
<Line-Item>
<LineNumber>1</LineNumber>
<BuyerItemCode>928</BuyerItemCode>
<SubFamily>9</SubFamily>
</Line-Item>
</Line>
<Line>
<Line-Item>
<LineNumber>2</LineNumber>
<BuyerItemCode>439</BuyerItemCode>
<SubFamily>9</SubFamily>
</Line-Item>
</Line>
</PriceCatalogue-Lines>
</Message>
</Group>
</Interchange>