Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用XSLT将XML值保存到变量_Xml_Xslt - Fatal编程技术网

使用XSLT将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代码:

<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>