我使用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>看起来真的很愚蠢(即使它确实有效)。
发布于 2009-06-30 22:18:42
所以这个问题的答案被证明是相当差劲的: update Xalan。我不知道我的旧版本出了什么问题,但是当我在http://xml.apache.org/xalan-j/downloads.html上切换到最新版本时,标签的实体转义突然消失了。不过,还是要感谢大家的帮助。
发布于 2009-06-30 06:52:52
您可以尝试将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解析器设置为不包含可忽略的空格,如果它在默认情况下还没有这样做的话。我还没有真正测试过这一点,但我在我的一个项目中做了类似的事情。
发布于 2009-06-29 19:02:42
有时像这样,事后用正则表达式替换它们并不是一个完全不好的选择,这至少会让您继续下去,直到您找到更好的选择。
https://stackoverflow.com/questions/1059854
复制相似问题