使用XSLT将XML值保存到变量
我试图将XML文档中的值保存到变量中。我知道您可以执行以下操作:使用XSLT将XML值保存到变量,xml,xslt,Xml,Xslt,我试图将XML文档中的值保存到变量中。我知道您可以执行以下操作: 下面是我的XML代码: <xml> <graph2> <averageHighTemperatures> <January>8.3</January> <February>8.5</February> <March>11.1</March> <A
下面是我的XML代码:
<xml>
<graph2>
<averageHighTemperatures>
<January>8.3</January>
<February>8.5</February>
<March>11.1</March>
<April>13.5</April>
<May>17.1</May>
<June>20.0</June>
<July>22.6</July>
<August>22.5</August>
<September>19.3</September>
<October>15.3</October>
<November>11.2</November>
<December>9.1</December>
</averageHighTemperatures>
</graph2>
</xml>
8.3
8.5
11.1
13.5
17.1
20
22.6
22.5
19.3
15.3
11.2
9.1
如何通过在XML文档中指定节点来选择每个月的值
以下是我的XSL:
<xsl:variable name="var" select="xml/graph2/averageHighTemperatures/*"/>
<table>
<xsl:for-each select="xml/graph2/averageHighTemperatures">
<tr>
<td><xsl:value-of select="January $var"/></td>
<td><xsl:value-of select="February $var"/></td>
</tr>
</xsl:for-each>
</table>
在上面的示例中,“一月”和“二月”仅用于表示所需的值。由于月份名称是元素名称,您可以使用与
local-name()匹配的谓词筛选器来选择它们:
您希望得到的结果是什么?因此,您只是想知道如何从$var
中选择特定的月份?在本例中,您只是试图表示只需要一月和二月的临时值:8.38.5
?如果是这样,添加一个所需输出的示例将很有帮助。您的示例XSLT有点让人困惑,因为不清楚您是否希望“一月”和“二月”出现在输出中,或者您只是指出这是您希望能够选择的月份值。这非常有效,谢谢。我确实有一个关于多段线中的点的问题。这条线现在看起来像是一个有着一个洞的火山口,而不是一座山。我知道这是因为Y值是100(高度)-XML值(8)=92绘制的,这是一个比100-XML值(22)=78更大的值。如何执行反转以将22的值绘制在较小的XML值之上?反转数字的最简单方法是乘以-1,甚至在生成输出时只添加“-”,但如果没有更多上下文,则很难给出建议。可能会问一个单独的问题,其中包含更多细节描述问题和期望结果的示例。这很奇怪(因为没有更好的词):为什么要在单个节点上对每个
执行xsl:for?为什么不在多个子节点上为每个
执行xsl:for-each,而不是为每个子节点重复代码呢?这在OP原始代码示例中有介绍。只是演示如何回答问题而不重写整个内容。不确定它是否用于设置上下文节点(用于较短的XPath以保持干燥),实际数据是否有多个AverageHighTemperates元素,等等。通常,我会用xsl:for each
替换xsl:for each
@MadsHansen看看OP的最后三个问题。
<xsl:transform version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="/">
<xsl:variable name="var" select="xml/graph2/averageHighTemperatures/*"/>
<table>
<xsl:for-each select="xml/graph2/averageHighTemperatures">
<tr>
<td><xsl:value-of select="'January ', $var[local-name()='January']"/></td>
<td><xsl:value-of select="'February ', $var[local-name()='February']"/></td>
</tr>
</xsl:for-each>
</table>
</xsl:template>
</xsl:transform>
<xsl:transform version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:key name="var" match="xml/graph2/averageHighTemperatures/*" use="local-name()"/>
<xsl:template match="/">
<table>
<xsl:for-each select="xml/graph2/averageHighTemperatures">
<tr>
<td><xsl:value-of select="'January ', key('var', 'January')"/></td>
<td><xsl:value-of select="'February ', key('var', 'February')"/></td>
</tr>
</xsl:for-each>
</table>
</xsl:template>
</xsl:transform>