每个循环的xslt映射

时间:2017-11-09 14:22:19

标签: dictionary xslt foreach

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns="urn:schemas-microsoft-com:office:spreadsheet"
    xmlns:o="urn:schemas-microsoft-com:office:office"
    xmlns:x="urn:schemas-microsoft-com:office:excel"
    xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"
    xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:html="http://www.w3.org/TR/REC-html40"
    xmlns:pi="urn:com.workday/picof">

我有以下地图:

    <xsl:variable name="tabsNames">
        <entry><name>A</name><value>one</value></entry>
        <entry><name>B</name><value>two</value></entry>
    </xsl:variable>

我想迭代地图以获取分配给变量的每个键和值:

<xsl:for-each select="$tabsNames/element()">
     <xsl:variable name="tabName" select="./entry/name"/>
     <xsl:variable name="tabValue" select="./entry/value"/>
</xsl:for-each>

为了获得名称和价值,选择应该如何?

1 个答案:

答案 0 :(得分:3)

好吧,如果要使用entry处理for-each和{{1}的name来处理变量,那么单独使用变量只会为包含一些value元素的临时树提供变量。在for-each内的变量中使用例如

<xsl:for-each select="$tabsNames/entry">
     <xsl:variable name="tabName" select="name"/>
     <xsl:variable name="tabValue" select="value"/>
</xsl:for-each>

鉴于您在编辑问题时显示的命名空间,您有两个选择,要么您需要确保变量中的临时元素不会最终出现在样式表中的默认命名空间xmlns="urn:schemas-microsoft-com:office:spreadsheet"中,你可以用

做到这一点
<xsl:variable name="tabsNames" xmlns="">
    <entry><name>A</name><value>one</value></entry>
    <entry><name>B</name><value>two</value></entry>
</xsl:variable>

然后我的建议仍然有效,或者您需要调整路径,例如

<xsl:for-each select="$tabsNames/ss:entry">
     <xsl:variable name="tabName" select="ss:name"/>
     <xsl:variable name="tabValue" select="ss:value"/>
</xsl:for-each>

<xsl:for-each select="$tabsNames/entry" xpath-default-namespace="urn:schemas-microsoft-com:office:spreadsheet">
     <xsl:variable name="tabName" select="name"/>
     <xsl:variable name="tabValue" select="value"/>
</xsl:for-each>