在XSLT中可以使用什么编码来仅支持基本的拉丁字母字符?

时间:2017-07-27 17:09:44

标签: xslt encoding xslt-2.0

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

我的需求是:

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

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

如果上面的错误可以告诉我正确的编码

谢谢, 贾根

1 个答案:

答案 0 :(得分:2)

就像评论中提到的@EiríkrÚtlendi一样;清理/检查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".