我有以下代码:
<Parent>
<Map sourcename="ItemAName" destinationname="itemaname">
<Assignment source="Test.OrderA.ItemA" destination="Test.OrderB.ItemA" sourcename="ItemAName" destinationname="ITEMANAME" description="descript3" mandatory="False"/>
<Assignment source="Test.OrderB.ItemA" destination="Test.OrderC.ItemA" sourcename="ITEMANAME" destinationname="itemaname" description="descript3" mandatory="False"/>
</Map>
<Map sourcename="ItemAQuantity" destinationname="itemaquantity">
<Assignment source="Test.OrderA.ItemA" destination="Test.OrderB.ItemA" sourcename="ItemAQuantity" destinationname="ITEMAQUANTITY" description="descript4" mandatory="False"/>
<Assignment source="Test.OrderB.ItemA" destination="Test.OrderC.ItemA" sourcename="ITEMAQUANTITY" destinationname="itemaquantity" description="descript4" mandatory="False"/>
<Assignment source="Test.OrderC.ItemA" destination="Test.OrderD.ItemA" sourcename="itemaquantity" destinationname="ItEmQuAnTiTy" description="descript4" mandatory="False"/>
</Map>
</Parent>
我希望显示一个包含6列的表(在Map中包含更多子项的分配数* 2),在本例中。根据xml文件中的数据,有时需要更多或更少。如果我添加另一个包含四个赋值的地图,则该表应该有8列。
我正在使用它:
<xsl:template match="Map">
<xsl:if test="position() = 1">
<tr class="bold">
<xsl:for-each select="Assignment">
<td><xsl:value-of select="@source"/></td>
<td><xsl:value-of select="@destination"/></td>
</xsl:for-each>
</tr>
</xsl:if>
<tr>
<xsl:apply-templates select="Assignment"/>
</tr>
</xsl:template>
<xsl:template match="Assignment">
<td><xsl:value-of select="@sourcename" /></td>
<td><xsl:value-of select="@destinationname" /></td>
</xsl:template>
我知道我不应该使用if来测试它是否是第一个位置。我需要一种方法来计算有更多作业的孩子的作业数量。
有办法吗?
答案 0 :(得分:0)
我想你需要这样的东西:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xml:space="default" exclude-result-prefixes="" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" omit-xml-declaration="no" indent="yes" />
<xsl:template match="Parent">
<xsl:choose>
<xsl:when test="count(./Map[@sourcename='ItemAName']/Assignment) > count(./Map[@sourcename='ItemAQuantity']/Assignment)">
Work on the map named ItemAName
</xsl:when>
<xsl:otherwise>
Work on the map named ItemAQuantity
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>
答案 1 :(得分:0)
我需要一种方法来计算孩子的分配数量 更多作业。
我建议你把它放在样式表的顶层:
<xsl:variable name="columns">
<xsl:for-each select="/Parent/Map">
<xsl:sort select="count(Assignment)" data-type="number" order="descending"/>
<xsl:if test="position()=1">
<xsl:value-of select="2*count(Assignment)"/>
</xsl:if>
</xsl:for-each>
</xsl:variable>
现在,您在$ columns变量中拥有所需列数,并可以继续创建它们。如果您愿意,可以告诉变量复制具有最多分配的实际地图,以便您可以在创建列时迭代它们。