如何配置 Apache 的 Xalan-Transformer 不创建空行?

问题描述 投票:0回答:1

我使用 Xalan 转换器来格式化带有缩进的 xml 文件。但是,当我将格式化程序应用于已包含缩进的 xml 文件时,它会创建大量空行。

例如输入

<foo><bar/></foo>

变换为

<?xml version="1.0" encoding="UTF-8"?><foo>
    <bar/>
</foo>

(我认为这是正确的),但是将变压器应用于此会产生

<?xml version="1.0" encoding="UTF-8"?><foo>
        
    <bar/>
    
</foo>

并且连续的转换会添加更多的空行。

我不记得撒克逊变形金刚有这种行为。如何设置我的 Xalan 变压器不创建空行?

更具体地说,这是一个对上面的示例进行编码的简单测试,我想通过适当配置的变压器来传递:

import java.io.StringReader;
import java.io.StringWriter;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Source;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.stream.StreamSource;
import org.junit.Assert;
import org.junit.jupiter.api.Test;

class TransformerTest {
    @Test
    void formattingShouldBeIdempotent() throws Exception
    {
      TransformerFactory factory = TransformerFactory.newDefaultInstance();
      Transformer transformer = factory.newTransformer();
      transformer.setOutputProperty(OutputKeys.INDENT, "yes");

      String transformed1 = transform("<foo><bar/></foo>", transformer);
      String transformed2 = transform(transformed1, transformer);

      Assert.assertEquals(transformed1, transformed2);
    }

    private String transform(String input, Transformer transformer) throws TransformerException
    {
      Source source = new StreamSource(new StringReader(input));
      StringWriter outWriter = new StringWriter();
      StreamResult result = new StreamResult(outWriter);
      transformer.transform(source, result);
      return outWriter.getBuffer().toString();
    }
}
java xml whitespace xalan
1个回答
0
投票

如果您必须使用 Xalan 而不是 Saxon,我建议在序列化之前进行一个简单的转换,该转换本质上只是执行

<xsl:strip-space elements="*"/>
,然后复制输入不变。

© www.soinside.com 2019 - 2024. All rights reserved.