我使用的javax.xml.transform.Transformer类来执行一些XSLT转换,就像这样:
TransformerFactory factory = TransformerFactory.newInstance();
StreamSource source = new StreamSource(TRANSFORMER_PATH);
Transformer transformer = factory.newTransformer(source);
StringWriter extractionWriter = new StringWriter();
String xml = FileUtils.readFileToString(new File(sampleXmlPath));
transformer.transform(new StreamSource(new StringReader(xml)),
new StreamResult(extractionWriter));
System.err.println(extractionWriter.toString());
但是,无论我做什么,我似乎无法避免变压器转换是那样的源文件中,以他们的性格实体当量(任何标签	
我曾经尝试都:
transformer.setParameter("encoding", "UTF-8");
和:
transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
但无论这些帮助。 有没有人有什么建议? 因为:
					<MyElement>
看起来真的很愚蠢的(即使它的工作)。
所以,这个问题的答案一个竟然是相当跛脚:更新的Xalan。 我不知道什么是错的我的老版本,但是当我在切换到最新版本: http://xml.apache.org/xalan-j/downloads.html突然标签的实体转义只是走了。 谢谢大家对你的帮助,虽然。
你可以尝试使用相结合的SAXTransformerFactory用的XMLReader。
就像是:
SAXTransformerFactory transformFactory = (SAXTransformerFactory) TransformerFactory.newInstance();
StreamSource source = new StreamSource(TRANSFORMER_PATH);
StringWriter extractionWriter = new StringWriter();
TransformerHandler transformerHandler = null;
try {
transformerHandler = transformFactory.newTransformerHandler(source);
transformerHandler.setResult(new StreamResult(extractionWriter));
} catch (TransformerConfigurationException e) {
throw new SAXException("Unable to create transformerHandler due to transformer configuration exception.");
}
XMLReader reader = SAXParserFactory.newInstance().newSAXParser().getXMLReader();
reader.setContentHandler(transformerHandler);
reader.parse(new InputSource(new FileReader(xml)));
System.err.println(extractionWriter.toString());
您应该能够设置SAX解析器不包括忽略的空格,如果它不已经在默认情况下做到这一点。 我还没有实际测试过这一点,但我在我的项目的一个类似的东西。
有时事情就是这样,自己与正则表达式替换它们之后是不是一个完全坏的选择,这至少可以让你走,直到你后来发现一个更好的选择。
有没有你正在阅读的文件转换成字符串第一,而不是直接使用文件流的原因吗?
代替
String xml = FileUtils.readFileToString(new File(sampleXmlPath));
transformer.transform(new StreamSource(new StringReader(xml)),
new StreamResult(extractionWriter));
你可以试试
transformer.transform(new StreamSource(new FileReader(sampleXmlPath)),
new StreamResult(extractionWriter));
这可能不是问题的原因,但我已经看到它之前造成类似的问题。 如果您FileUtils.readFileToString是Commons.IO版本,它在字符串中的UFT-16(Java默认,IIRC),而不是你想要的东西,这是UTF-8。