使用Saxon XSLT库提取文本输出:现有方法是否最优?
Saxon s9api 文本输出优化方案
- 你当前用
String text = xdmValue.stream().map(XdmItem::getStringValue).collect(joining());提取文本的方式是可行的,但确实存在更直接的方法跳过节点封装的额外开销。 - 当使用
<xsl:output method="text"/>时,在s9api中可以直接将转换结果写入到OutputStream或Writer,无需先生成XdmValue。具体实现方式是调用Transformer的setDestination()方法,传入配置好的Serializer实例:// 示例:写入到StringWriter获取文本内容 Processor processor = new Processor(false); XsltCompiler compiler = processor.newXsltCompiler(); XsltExecutable executable = compiler.compile(new StreamSource(new File("your-transform.xsl"))); XsltTransformer transformer = executable.load(); transformer.setSource(new StreamSource(new File("your-input.xml"))); StringWriter writer = new StringWriter(); Serializer serializer = processor.newSerializer(writer); // 若需要指定编码等参数,可通过Serializer的setOutputProperty配置 // serializer.setOutputProperty(Serializer.Property.ENCODING, "UTF-8"); transformer.setDestination(serializer); transformer.transform(); String text = writer.toString(); - 这种方式直接让Saxon将文本输出写入目标流,避免了生成大量
XdmNode的内存开销,效率更高,也更契合文本输出模式的设计初衷。
内容的提问来源于stack exchange,提问作者Garret Wilson
相关产品推荐
相关产品推荐

