我们能用ISO-8859-1 unicode代替UTF-8进行XSLT转换吗?
目前,我没有遇到任何问题时,使用UTF-8。下面的代码工作正常:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:this="http://this.com"
xmlns:wd="urn:com.workday.report/abcd_services" version="2.0">
<xsl:output method="text" indent="yes" encoding="UTF-8"/> 下面的代码给出了错误:
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:this="http://this.com"
xmlns:wd="urn:com.workday.report/INT1204_GE_Capital_Fleet_Services" version="2.0">
<xsl:output method="text" indent="yes" encoding="ISO-8859-1"/> 发布于 2015-09-10 19:17:08
我所知道的每一个处理器都支持ISO-8859-1、usually (compulsary)、CP1252以及它的许多变体,因为从处理器的角度来看,这些只是一个字节的编码,除了一个转换表之外,这使得实现变得非常简单。
这就给我们留下了错误,不幸的是,你还没有表现出来。让我们来讨论几个选择:
您将此作为样式表的prolog编写。虽然它本身并不违法,但它没有任何用途,也不会对处理器处理任何输入、XML或输出的方式产生任何影响。但是,它确实严格限制了允许使用的字符。
假设您本可以将原始样式表保存为UTF-8,然后使用BOM,使用一些不了解XML的编辑器将其更改为ISO-8859-1,这将是非法的,您将收到类似这样的信息:"F Xerces The processing指令目标匹配“"xXlL”是不允许的,或者“prolog之前不允许的内容”。
通常情况下,只需将样式表保留在任务可用的最佳编码中,这通常将是UTF-8,因为任何使用XML的工具都必须能够处理这一点,而且由于这是样式表,任何XSLT处理程序都能够处理它。
这是您在样式表本身中编写的。如果将方法设置为XML或HTML,它不会(几乎永远不会)导致错误,因为样式表中的任何字符都将被转义为数字实体:假设您有"ٺٻټٽ",它将变成ٺٻټٽ(或十进制等号),因为这些字符在ISO-8859-1中不可用。
但是将方法设置为text。这本身没有什么问题,但是该编码所可用的字符是非常有限的。假设您的当前ISO-8859-1样式表已正确编码(即样式表编译),但您有如下所示:
<!-- not allowed with your text output -->
<xsl:value-of select="'Āā" />这相当于:
<!-- won't compile -->
<xsl:value-of select="'Āā'" />在第一种情况下,这将引发一个错误。例如,我自己的处理器埃塞尔特将抛出:
序列化异常:在不允许字符引用的上下文中,不能在使用的编码中表示字符“转正”。
撒克逊会抛出:
输出字符在此编码中不可用(十进制256)
我的猜测是,上述方案之一适用于您。如果您显式地希望使用较小的编码,那么请确保您没有做任何非法的事情。如果这没有帮助,请更新您的问题(我建议您无论如何都应该这样做)与确切的错误,使用的处理器和如何复制它。
https://stackoverflow.com/questions/32508785
复制相似问题