首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何防止javax Transformer转义空格?

如何防止javax Transformer转义空格?
EN

Stack Overflow用户
提问于 2009-06-29 18:51:12
回答 4查看 4.5K关注 0票数 2

我使用javax.xml.transform.Transformer类来执行一些XSLT转换,如下所示:

代码语言:javascript
复制
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());

但是,无论我做什么,我似乎都无法避免让转换器将源文档中的任何制表符转换为与其等效的字符实体(	)。我都试过了:

代码语言:javascript
复制
transformer.setParameter("encoding", "UTF-8");

和:

代码语言:javascript
复制
transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");

但这两种方法都没有用。有人有什么建议吗?因为:

代码语言:javascript
复制
&#9;&#9;&#9;&#9;&#9;<MyElement>

看起来真的很愚蠢(即使它确实有效)。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-06-30 22:18:42

所以这个问题的答案被证明是相当差劲的: update Xalan。我不知道我的旧版本出了什么问题,但是当我在http://xml.apache.org/xalan-j/downloads.html上切换到最新版本时,标签的实体转义突然消失了。不过,还是要感谢大家的帮助。

票数 2
EN

Stack Overflow用户

发布于 2009-06-30 06:52:52

您可以尝试将SAXTransformerFactory与XMLReader结合使用。

类似于:

代码语言:javascript
复制
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解析器设置为不包含可忽略的空格,如果它在默认情况下还没有这样做的话。我还没有真正测试过这一点,但我在我的一个项目中做了类似的事情。

票数 1
EN

Stack Overflow用户

发布于 2009-06-29 19:02:42

有时像这样,事后用正则表达式替换它们并不是一个完全不好的选择,这至少会让您继续下去,直到您找到更好的选择。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1059854

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档