我使用java.util.zip类成功地使用Java读取Microsoft DOCX文件。我首先将MS XML翻译成我需要的XSLT。由于我输出HTML,我注意到大多数明显的字符都被XSLT正确转义,而我无需做任何事情,例如ndash,ldquo,rdquo,egraute,eacute,uuml,auml等。然后我使用Java正则表达式来对XSLT输出进行进一步处理。
我的问题是除了法语和德语之外,我还有希腊语。希腊语不会被XSLT转义,但在XSLT输出中正确显示,如果我编辑生成的文件(使用eclipse,甚至使用记事本),未正式显示的希腊语将正确显示。但是...
当我使用java代码处理XSLT输出时,它会破坏希腊语,并且我保存的任何页面都会显示通常的随机字符,如果页面编码错误则会显示。
显然,我没有以正确的方式编码。因为我的所有ISO-8859-1字符都被转义,所以我一直试图用UTF-8来做。
任何人都可以建议我可能做错了吗?有没有办法说服XSLT为我以及它已经做过的那些人逃脱希腊字符?
答案 0 :(得分:1)
您是否尝试将xslt中的输出编码设置为“us-ascii”?这样它就可以使用相应的字符实体转义所有非ascii字符。
然而,真正的问题是使用正则表达式处理生成的XML / HTML。您应该尝试使用xml和编码感知工具进行此处理,或者甚至作为xsl转换的一部分。大多数Java XSLT处理器甚至允许从转换中调用Java函数。
答案 1 :(得分:0)
您可以使用disable-output-escaping
和xsl:value-of
的{{1}}属性。
xsl:text
由于默认值为“no”,您必须将其主动设置为“yes”才能在输出中获取转义字符。