xml - 如何使 xsl 标记化工作

标签 xml xslt xslt-1.0

我有一个巨大的 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 个错误:

  1. 您正在使用 tokenize()在 1.0 样式表中。您需要将版本更改为 2.0 并使用 2.0 处理器。如果您使用网络浏览器进行转换,则基于 xml-stylesheet处理指令,您可能没有使用 2.0 处理器。

  2. 您的标记化 ( [text]) 的第一个参数无效。只需使用 text .

  3. 您过早地关闭了 xsl:for-each .

  4. 你正在输出一个 <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:outputnormalize-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/

相关文章:

java - 检查 xml 标签是否包含注释

android - 如何在android中创建像windows输入键一样的编辑文本

xml - Log4net xml appender 不创建根元素

html - 我们可以在 XSL 变量中插入 HTML 标签吗

xml - XSL 将具有属性的 xml 行转换为无序列表 TreeView

asp.net - 导入 SiteFinity

XSLT 检查节点可用性

xslt - 为什么我的 XSLT 变量没有替换它们的值?

java - 使用 Xalan APi 2.7.1 进行 XSLT 处理

java - 如何使用xslt将父节点 namespace 复制到子元素?