尝试解析下面的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>
内的节点
这里有什么想法吗?
答案 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>