我有一个巨大的 xsl 文件,但我使用“tokenize”通过逗号分隔的字符串进行解析的部分抛出错误。为简单起见,我将其分解为仅测试标记化部分,似乎无法取得任何进展。我不断收到以下错误:
Expression expected. tokenize(-->[<--text],',')
我尝试使用其他帖子中共享的一些示例 xsl,但从未设法让它工作。我很难理解为什么我下面的 xsl 代码无效。这似乎不是很简单,但我想我遗漏了一些简单的东西。任何帮助我朝着正确方向前进的帮助将不胜感激。
XSL:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/root">
<xsl:for-each select="tokenize([text],',')"/>
<items>
<item>
<xsl:value-of select="."/>
</item>
</items>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
XML:
<?xml-stylesheet type="text/xsl" href="simple.xsl"?>
<root>
<text>Item1, Item2, Item3</text>
</root>
我期望 XML 输出如下:
<items>
<item>Item1</item>
<item>Item2</item>
<item>Item3</item>
</items>
谢谢!
最佳答案
我看到 4 个错误:
您正在使用
tokenize()
在 1.0 样式表中。您需要将版本更改为 2.0 并使用 2.0 处理器。如果您使用网络浏览器进行转换,则基于xml-stylesheet
处理指令,您可能没有使用 2.0 处理器。您的标记化 (
[text]
) 的第一个参数无效。只需使用text
.您过早地关闭了
xsl:for-each
.你正在输出一个
<items>
对于每个项目。把<items>
外面xsl:for-each
.
变化示例:
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/root">
<items>
<xsl:for-each select="tokenize(text,',')">
<item>
<xsl:value-of select="."/>
</item>
</xsl:for-each>
</items>
</xsl:template>
</xsl:stylesheet>
要使用 2.0 处理器真正获得所需的输出,我还建议使用 xsl:output
和 normalize-space()
:
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes"/>
<xsl:template match="/root">
<items>
<xsl:for-each select="tokenize(text,',')">
<item>
<xsl:value-of select="normalize-space(.)"/>
</item>
</xsl:for-each>
</items>
</xsl:template>
</xsl:stylesheet>
关于xml - 如何使 xsl 标记化工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11487704/