使用XSL Variable获取值(XPath) - xslt

时间:2017-04-29 08:22:26

标签: java xml xslt

尝试解析下面的xml

<root>
<SelectValue>One</SelectValue> <!-- Tends to Vary -->
<SubRoot>  <!-- Iterate elements inside it using [ SelectValue] -->
    <One>One</One>
    <Two>Two</Two>
    <Three>Three</Three> 
</SubRoot>
</root> 

以下xsl

    <xsl:template match="/root">
        <xsl:variable name="columns" select="SelectValue"/>
        <xsl:for-each select="SubRoot"> -->
                        <tr>
                            <td>
                                <xsl:value-of select="SubRoot/@*[local-name()=$columns]"/>
                            </td>
                        </tr>

  </xsl:for-each>

检索空html-tags,而我期待下面的内容,

 <table>
   <thead>
   <th>One</th>
   </thead>
   <tbody>
    <tr>
      <td>one</td>
    </tr>
   <tbody>
</table>

我正在尝试传递<SelectValue>中的值以获取<SubRoot>内的节点

这里有什么想法吗?

2 个答案:

答案 0 :(得分:1)

我无法识别您引用的错误消息(它甚至看起来不是英文),但我在尝试运行您的代码时遇到错误。原因是你的变量名无效;你需要改变:

<xsl:variable name="$columns" select="..."/>

为:

<xsl:variable name="columns" select="..."/>

在引用变量时使用$前缀,而不是在定义变量时使用。{/ p>

另请注意,以/开头的XPath表达式是绝对路径,从根节点开始。因此,select表达式(/root除外)都不会选择任何内容。我猜你正在尝试做类似的事情:

<xsl:template match="/root">
    <xsl:variable name="columns" select="SelectValue"/>
    <tr>
        <td>
            <xsl:value-of select="SubRoot/*[local-name()=$columns]"/>
        </td>
    </tr>
</xsl:template>
给出输入示例的

将返回:

<tr>
  <td>One</td>
</tr>

答案 1 :(得分:0)

在xsl:for-each select =“SubRoot”中,SubRoot是上下文节点,因此您不应该选择另一个SubRoot。所以你想要

<xsl:for-each select="SubRoot">
     <tr>
          <td>
              <xsl:value-of select="@*[local-name()=$columns]"/>
          </td>
    </tr>