是否有动态方式来获取第二次出现的属性?
对于这个XML示例,我想将SummaryCell / @ Name值的前12个值放入变量Month01,Month02,依此类推;
<SummaryHeader>
<SummaryColumnGroup Name="2014">
<SummaryCell Name="Feb14" Type="Text" Value="Feb"/>
<SummaryCell Name="Jan14" Type="Text" Value="Jan"/>
</SummaryColumnGroup>
<SummaryColumnGroup Name="2013">
<SummaryCell Name="Dec13" Type="Text" Value="Dec"/>
<SummaryCell Name="Nov13" Type="Text" Value="Nov"/>
<SummaryCell Name="Oct13" Type="Text" Value="Oct"/>
<SummaryCell Name="Sep13" Type="Text" Value="Sep"/>
<SummaryCell Name="Aug13" Type="Text" Value="Aug"/>
<SummaryCell Name="Jul13" Type="Text" Value="Jul"/>
<SummaryCell Name="Jun13" Type="Text" Value="Jun"/>
<SummaryCell Name="May13" Type="Text" Value="May"/>
<SummaryCell Name="Apr13" Type="Text" Value="Apr"/>
<SummaryCell Name="Mar13" Type="Text" Value="Mar"/>
<SummaryCell Name="Feb13" Type="Text" Value="Feb"/>
<SummaryCell Name="Jan13" Type="Text" Value="Jan"/>
</SummaryColumnGroup>
以下是我使用的XSL;
<xsl:variable name="Month01" select="//SummaryHeader/SummaryColumnGroup/SummaryCell[1]/@Name"/>
<xsl:variable name="Month02" select="//SummaryHeader/SummaryColumnGroup/SummaryCell[2]/@Name"/>
<xsl:variable name="Month03" select="//SummaryHeader/SummaryColumnGroup/SummaryCell[3]/@Name"/>
期望的输出:
<Month01>Feb14</Month01>
<Month02>Jan14</Month02>
<Month03>Dec13</Month03>
实际输出:
<Month01>Feb14</Month01>
<Month02>Jan14</Month02>
<Month03>Oct13</Month03>
发生的事情是,SummaryCell [3]实际上选择了以下SummaryColumnGroup的第3个SummaryCell,而不是迭代到SummaryCell的第3次出现。
注意:SummaryColumnGroup中的SummaryCell数是动态的,与上面的示例没有特别相同。
答案 0 :(得分:1)
在实现输出时,请尝试以下方法:
<xsl:variable name="Month03" select="//SummaryHeader/descendant::SummaryCell[3]/@Name"/>
其他人也这样做。
答案 1 :(得分:1)
我想获得SummaryCell / @ Name值的前12个值
有一种更好的方法可以做到这一点。以下样式表:
XSLT 1.0
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="/">
<root>
<xsl:for-each select="SummaryHeader/SummaryColumnGroup/SummaryCell[count(preceding::SummaryCell) < 12 ]">
<Month num="{position()}"><xsl:value-of select="@Name"/></Month>
</xsl:for-each>
</root>
</xsl:template>
</xsl:stylesheet>
应用于(更正的)输入:
<SummaryHeader>
<SummaryColumnGroup Name="2014">
<SummaryCell Name="Feb14" Type="Text" Value="Feb"/>
<SummaryCell Name="Jan14" Type="Text" Value="Jan"/>
</SummaryColumnGroup>
<SummaryColumnGroup Name="2013">
<SummaryCell Name="Dec13" Type="Text" Value="Dec"/>
<SummaryCell Name="Nov13" Type="Text" Value="Nov"/>
<SummaryCell Name="Oct13" Type="Text" Value="Oct"/>
<SummaryCell Name="Sep13" Type="Text" Value="Sep"/>
<SummaryCell Name="Aug13" Type="Text" Value="Aug"/>
<SummaryCell Name="Jul13" Type="Text" Value="Jul"/>
<SummaryCell Name="Jun13" Type="Text" Value="Jun"/>
<SummaryCell Name="May13" Type="Text" Value="May"/>
<SummaryCell Name="Apr13" Type="Text" Value="Apr"/>
<SummaryCell Name="Mar13" Type="Text" Value="Mar"/>
<SummaryCell Name="Feb13" Type="Text" Value="Feb"/>
<SummaryCell Name="Jan13" Type="Text" Value="Jan"/>
</SummaryColumnGroup>
</SummaryHeader>
将返回以下结果:
<?xml version="1.0" encoding="UTF-8"?>
<root>
<Month num="1">Feb14</Month>
<Month num="2">Jan14</Month>
<Month num="3">Dec13</Month>
<Month num="4">Nov13</Month>
<Month num="5">Oct13</Month>
<Month num="6">Sep13</Month>
<Month num="7">Aug13</Month>
<Month num="8">Jul13</Month>
<Month num="9">Jun13</Month>
<Month num="10">May13</Month>
<Month num="11">Apr13</Month>
<Month num="12">Mar13</Month>
</root>
我认为编号<MonthXX>
元素是一个很好的方法,但当然 可以通过使用<xsl:element>
来计算名称从位置。