在运行时评估 XPath 表达式还是使用不同的方法?
<grid>
<col>Links</col>
<col>Rechts</col>
<row>
<Links>l1</Links>
<Rechts>r1</Rechts>
</row>
<row>
<Links>l2</Links>
<Rechts>r2</Rechts>
</row>
</grid>
大家好,鉴于上面的 XML 数据,我想创建一个类似以下的表:
Links|Rechts
l1|r1
l2|r2
我的 XSL 模板是:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:dyn="http://exslt.org/dynamic"
extension-element-prefixes="dyn">
<xsl:template match="grid">
<xsl:for-each select="//row">
<xsl:variable name="currentrow" select="."/>
<xsl:for-each select="//col">
<xsl:variable name="colname" select="text()"/>
<xsl:value-of select="dyn:evaluate('$currentrow/$colname/text()')"></xsl:value-of>
</xsl:for-each>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
我得到的唯一输出是“”。
我不知道如何解决我的问题。我不知道使用 dyn:evaluate 是否是正确的方法。
感谢您的帮助!
<grid>
<col>Links</col>
<col>Rechts</col>
<row>
<Links>l1</Links>
<Rechts>r1</Rechts>
</row>
<row>
<Links>l2</Links>
<Rechts>r2</Rechts>
</row>
</grid>
Hey folks, given the XML data above I want to create a table like:
Links|Rechts
l1|r1
l2|r2
My XSL Template is:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:dyn="http://exslt.org/dynamic"
extension-element-prefixes="dyn">
<xsl:template match="grid">
<xsl:for-each select="//row">
<xsl:variable name="currentrow" select="."/>
<xsl:for-each select="//col">
<xsl:variable name="colname" select="text()"/>
<xsl:value-of select="dyn:evaluate('$currentrow/$colname/text()')"></xsl:value-of>
</xsl:for-each>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
The only output I get is "".
I Have no clue how to solve my issue. I dont event know, whether its the right way to use dyn:evaluate.
Thanks for help!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
将您的 XSLT
grid
部分替换为我已使用
作为换行符,如果这不是 HTML,请使用相关符号。Replace your XSLT
grid
part withI have used
<br>
for a newline, if this is not HTML, use relevant symbol(s).请注意,
删除纯空白文本节点,否则这些文本节点将出现在输出中|
)row/*
编辑一个更详细的版本,不假设每列都会在那里。
Notes
<xsl:strip-space elements="*">
removes whitespace-only text nodes that would otherwise appear in the output|
)row/*
EDIT A more elaborate version that does not assume every column would be there.
此样式表:
输出:
注意:迭代
行
上下文中的列名称。This stylesheet:
Output:
Note: Iterate over the columns' names in
row
context.此转换(模板数量最少 - 仅 3 个,比所有其他当前解决方案都短,并且能够适应元素顺序或缺少
col
元素):当应用于提供的 XML 文档时:
产生所需的正确结果:
This transformation (having the smallest number of templates -- just 3, and shorter than all other current solutions, and resilient to element order or missing
col
elements):when applied on the provided XML document:
produces the wanted, correct result: