привет
вообщем немного заплутался я из хsl, опыта работы с функциями мало. Вообщем такая задача: эсть xml1:
Код | <accommodations> <accommodation> <acco_id>8888N</acco_id> <name>Qwerty</name> <offcial_rating/> </accommodation>
<accommodation> <acco_id>5555A</acco_id> <name>Qwerty2</name> <offcial_rating /> </accommodation> <accommodations>
|
имеется xml2:
Код | <root> <test date="24/12/2010"> <codeTo>5555A</codeTo> <catalogCode>NV</catalogCode> </test> <test date="25/12/2010"> <codeTo>8888N</codeTo> <catalogCode>LI</catalogCode> </test> <test date="26/12/2010"> <codeTo>9999V</codeTo> <catalogCode>LL</catalogCode> </test> </root>
|
вообщем на основе этих двух нужно сделать еще один xml:
Код | <results> <result matching="yes" date="24/12/2010"> <!--matching="yes"если елемент codeTo из xml2 равен елементу acco_id из xml1, иначе matсhing="no" --> <!--date устанавливается если matching='yes' и берется соответсвенно (из елементов где codeTo=acco_id) из xml2; если matching="no", то атрибут date должен отсутсвовать --> <result> </results>
|
теперь то что я делаю из xsl:
Код | <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fn="http://www.w3.org/2005/xpath-functions"> <xsl:param name="file2" select="'target/test-classes/test2.xml'" /> <xsl:variable name="file2Doc" select="document($file2)" /> <xsl:template match="/"> <xsl:element name="results"> <xsl:for-each select="accommodations/accommodation"> <xsl:element name="result"> <xsl:variable name="accoCode" select="acco_id" /> <xsl:attribute name="matching"> <xsl:for-each select="$file2Doc/root/test/codeTo"> <xsl:variable name="codeTo" select="." /> <xsl:variable name="EXPRESSION" select=".[fn:compare(fn:upper-case($codeTo), fn:upper-case($accoCode)) = 0]" /> <xsl:choose> <xsl:when test="$EXPRESSION"> <xsl:value-of select="'yes'" /> </xsl:when> </xsl:choose> </xsl:for-each> </xsl:attribute> </xsl:element> </xsl:for-each> </xsl:element> </xsl:template> </xsl:stylesheet>
|
1) какими средставами атрибуту matching проставлять "yes" либо "no" ... "yes" в данном случае проставляется, но "no" уже наверное как то после трансформации... надо еще раз по документу бежать... 2) вообщем неуверен как правильно сделать так чтоб во время трансформации можно было бы проверять значение атрибута matching и сетать значение date? (я сетнул атрибут matching, как потом при создании атрибута date проверить значение matching)
заранее спасибо
|