我正在使用javax.xml.transform.Transformer来获取HTML内容并解析为XML文档(我使用Crouton / TagSoup组合来完成此操作)。不过,我认为这不是太重要,因为这是我的问题:
我正在转储Transformer.transform()进程的输出,并在输出中看到©
之类的内容正在转换为它们的实际符号,在本例中是版权符号。
最终,这些内容将被重新保存为HTML文件,但不会让©
显示在文件中,而是应该使用这个特殊字符,它不符合HTML标准。< / p>
有没有办法让变换器忽略已经编码的HTML字符转换成它们的实际符号?
答案 0 :(得分:3)
您可以尝试以下操作:致电transformer.setOutputProperty(OutputKeys.ENCODING, "ASCII")
。这样,所有非ASCII字符都必须使用字符实体。
答案 1 :(得分:2)
如果是XSLT 2.0,你可以使用字符映射 - 我相信有人创建了定义所有HTML字符实体的字符映射。
因为它是Java,所以没有什么可以阻止你使用Saxon,并且Saxon有一个序列化属性saxon:character-representation =“entity”它似乎做你想要的(它不理解所有HTML定义的实体但是,只有拉丁文-1中的那些。)
答案 2 :(得分:0)
这不是我原来问题的正确解决方案,但这是让我了解的解决方法。
由于正在转换HTML实体,在发送内容字符串之前,我使用正则表达式将实体“转换”为另一种格式,因此解析器/转换器不会接收它们。
然后在传出字符串中,我只使用另一个正则表达式将它们转换回HTML实体。