如何将 HTML 元素的文本分配给 XSLT 变量?
How do I assign the text of HTML Elements to a XSLT Variable?
我想创建一个动态 XSLT 变量。它应该获取每行第一个 td 的内容,如下所示:
<tr><td>1</td><td>not Important</td></tr>
<tr><td>2</td><td>not Important</td></tr>
<tr><td>3</td><td>not Important</td></tr>
我的 XSL:Variable 看起来像这样:
<xsl:variable name="name" select="concat('out/',//td[1]/text(),'.html')"/>
我想使用元素内容(在我的案例 1、2、3 中)创建新的 Html 文件并相应地命名它们:
<xsl:result-document href="{$name}">
结果:
1.html
2.html
3.html
用我目前的 XSL:Variable 氧气会给我这个错误:
不允许将多个项目的序列作为 concat()
的第二个参数
如果你想将每一行映射到一个结果文档,那么我建议写一个模板
<xsl:template match="tr">
<xsl:result-document href="out{td[1]}.html">
...
</xsl:result-document>
</xsl:template>
然后确保父 table 有一个 apply-templates
,确保处理 tr
元素。
你遇到的问题是,concat() 函数可以将字符串放在一起,但是你的语句“//td[1]/text”确实 select 3 个字符串,而不仅仅是一个.
生成这 3 个文件名的一种方法是遍历 tr 节点并select在每个节点中创建第一个 td 节点:
<xsl:for-each select="//tr">
<xsl:variable name="justOneNameAtATime"
select="concat('out/',.//td[1]/text(),'.html')" />
<!-- do whatever you want with the single name, e.g.: -->
<xsl:result-document href="{$name}">
</xsl:for-each>
注意“//”前面的点,这意味着搜索 "td"-nodes 只会在当前上下文中发生(= 在 "tr"-node 中)。
我想创建一个动态 XSLT 变量。它应该获取每行第一个 td 的内容,如下所示:
<tr><td>1</td><td>not Important</td></tr>
<tr><td>2</td><td>not Important</td></tr>
<tr><td>3</td><td>not Important</td></tr>
我的 XSL:Variable 看起来像这样:
<xsl:variable name="name" select="concat('out/',//td[1]/text(),'.html')"/>
我想使用元素内容(在我的案例 1、2、3 中)创建新的 Html 文件并相应地命名它们:
<xsl:result-document href="{$name}">
结果: 1.html 2.html 3.html
用我目前的 XSL:Variable 氧气会给我这个错误: 不允许将多个项目的序列作为 concat()
的第二个参数如果你想将每一行映射到一个结果文档,那么我建议写一个模板
<xsl:template match="tr">
<xsl:result-document href="out{td[1]}.html">
...
</xsl:result-document>
</xsl:template>
然后确保父 table 有一个 apply-templates
,确保处理 tr
元素。
你遇到的问题是,concat() 函数可以将字符串放在一起,但是你的语句“//td[1]/text”确实 select 3 个字符串,而不仅仅是一个.
生成这 3 个文件名的一种方法是遍历 tr 节点并select在每个节点中创建第一个 td 节点:
<xsl:for-each select="//tr">
<xsl:variable name="justOneNameAtATime"
select="concat('out/',.//td[1]/text(),'.html')" />
<!-- do whatever you want with the single name, e.g.: -->
<xsl:result-document href="{$name}">
</xsl:for-each>
注意“//”前面的点,这意味着搜索 "td"-nodes 只会在当前上下文中发生(= 在 "tr"-node 中)。