使用 XSLT 对首字母缩略词列表进行 Slugify

Posted

技术标签:

【中文标题】使用 XSLT 对首字母缩略词列表进行 Slugify【英文标题】:Slugify an Acronym List with XSLT 【发布时间】:2011-11-27 14:26:58 【问题描述】:

需要从 XML 内容创建 slug。

我正在导航以从 Titles 创建 Slugs,并找到了以下列表。

Creating Slugs from Titles? Java code/library for generating slugs (for use in pretty URLs) 和类似的其他人。

我一直在寻找 XSL 解决方案的完美解决方案,它可以像 php 解决方案一样提供更好的 sluglies:http://blog.tersmitten.nl/slugify 并且还可以处理文件系统中的重复项。

输入 XML

<table>
    <tr>
        <td>2D</td>
        <td>Two Dimension</td>
    </tr>
    <tr>
        <td>A/C</td>
        <td>Account</td>
    </tr>
    <tr>
        <td>A/C</td>
        <td>Air Condition</td>
    </tr>
    <tr>
        <td>L&T</td>
        <td>Larsen & Toubro</td>
    </tr>
    <tr>
        <td>M + [ # ]</td>
        <td>Modified Algo</td>
    </tr>
</table>

预期输出

file: 2d.txt
------------
2D
Two Dimension

file: a-c.txt
-------------
A/C
Account

file: a-c-2.txt
---------------
A/C
Air Condition

file: l-t.txt
-------------
L&T
Larsen & Turbo

file: m.txt (NOT m-.txt)
-------------
M + [ # ]
Modified Algo

尝试过 XSL

<?xml version="1.0"?>

<xsl:stylesheet extension-element-prefixes="redirect" version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:redirect="http://xml.apache.org/xalan/redirect">

    <xsl:output method="text" version="1.0" />

    <xsl:template match="/">
        <xsl:for-each select="table/tr">
            <!-- The logic for variable value requires attention!! -->
            <xsl:variable name="acronym" select="translate(td[1], 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz')" />
            <xsl:variable name="tmpFilename" select="concat('C:/Temp/', $acronym, '.txt')" />

            <xsl:variable name="filename">
                <xsl:choose>
                    <xsl:when test="document($tmpFilename)">
                        <!-- Require logic to handle duplicate file existence. -->
                    </xsl:when>
                    <xsl:otherwise>
                        <xsl:value-of select="$filename" />
                    </xsl:otherwise>
                </xsl:choose>
            </xsl:variable>

            <redirect:write select="$filename">
                <xsl:value-of select="td[1]" />
                <xsl:text>&#10;</xsl:text>
                <xsl:value-of select="td[2]" />
            </redirect:write>
        </xsl:for-each>
    </xsl:template>
</xsl:stylesheet>

注意:文件名应仅包含操作系统支持的字符。其余的应转换为“-”。此外,不应有前导和尾随 '-' 字符(例如上面提到的最后一个输出文件)。

【问题讨论】:

您从哪里运行此 XSLT?文本处理(或文件写入,就此而言)并不完全是 XSLT 设计的那种东西,您可能想要使用其他东西。 【参考方案1】:

如果您正在寻找基于 Java 的解决方案,我有一个 online generator 供您使用。如果您查看 javascript,您会发现需要发出的 POST 请求 - 请不要敲击它;)

【讨论】:

以上是关于使用 XSLT 对首字母缩略词列表进行 Slugify的主要内容,如果未能解决你的问题,请参考以下文章

FxCop:CA1709:使用 Resharper 中的首字母缩略词字典

推特有停用词列表吗?

你如何 PEP 8 命名一个名称是首字母缩略词的类?

CamelCase 中的首字母缩略词 [关闭]

如何处理类名中的首字母缩略词? [复制]

在 slug url 中为 seo 使用单词的首字母缩略词是一种好习惯吗?