【问题标题】:What is the encoding can be used in XSLT to support only basic Latin alphabet characters?XSLT 中可以使用什么编码来仅支持基本的拉丁字母字符?
【发布时间】:2018-01-03 13:17:04
【问题描述】:

我正在寻找在处理我的 XML 时需要在 XSLT 中使用的正确编码类型。

我的需要是:

输出文本文件不接受任何特殊字符或UTF8。 使用的仅支持现代英文字母的字母逻辑是由 26 个字母组成的基于拉丁字母的字母 - 与基本现代拉丁字母中的字母相同。

我尝试使用 encoding="ISO 8859-1"encoding="ISO 8859-15"

如果上面有错误,谁能告诉我正确的编码

谢谢, 贾根

【问题讨论】:

  • 您需要什么并不完全清楚。 听起来您需要做的是在输出文件到达输出文件之前在 XSLT 代码中清理输出。
  • 你可以试试Windows-1252 charset
  • 每个角色都有其独特之处。

标签: xslt encoding xslt-2.0


【解决方案1】:

就像@EiríkrÚtlendi 在 cmets 中建议的那样;在 XSLT 中清理/检查您的输出。

您可以创建一个带有单个参数的函数来检查无效字符...

XML 输入

<elem>ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz</elem>

XSLT 2.0

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:so="StackOverflow Example">
  <xsl:output method="text"/>
  <xsl:strip-space elements="*"/>

  <xsl:template match="elem">
    <xsl:value-of select="so:out(.)"/>
  </xsl:template>

  <xsl:function name="so:out">
    <xsl:param name="str"/>
    <xsl:if test="matches($str,'[^\p{L}]')">
      <xsl:message terminate="yes">
        <xsl:value-of
          select="
          concat('Invalid character in &quot;',
          $str, '&quot;.')"
        />
      </xsl:message>
    </xsl:if>
    <xsl:value-of select="$str"/>
  </xsl:function>

</xsl:stylesheet>

文本输出

ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz

如果您将任何其他字符添加到输入中的elem 元素,您将收到以下消息(我添加了一个空格以使其失败):

Invalid character in "ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz".

您也可以逐个字符地检查它...

<xsl:function name="so:out">
  <xsl:param name="str"/>
  <xsl:for-each select="string-to-codepoints($str)">
    <xsl:if test="matches(codepoints-to-string(.),'[^\p{L}]')">
      <xsl:message terminate="yes">
        <xsl:value-of
          select="
            concat('Invalid character (&quot;',
            codepoints-to-string(.),
            '&quot;) in &quot;',
            $str, '&quot;.')"
        />
      </xsl:message>
    </xsl:if>
  </xsl:for-each>
  <xsl:value-of select="$str"/>
</xsl:function>

这会产生消息:

Invalid character (" ") in "ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz".

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-27
    • 1970-01-01
    • 2017-12-22
    相关资源
    最近更新 更多