建议以下计划:
import java.io.StringReader;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.stream.StreamSource;
public class CrDemo {
public static void main(String[] args) throws Exception {
final String xml = "<a>foo \nbar \n</a>";
final TransformerFactory tf = TransformerFactory.newInstance();
final Transformer t = tf.newTransformer();
t.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
t.setOutputProperty(OutputKeys.INDENT, "no");
t.setOutputProperty(OutputKeys.STANDALONE, "yes");
t.transform(new StreamSource(new StringReader(xml)), new StreamResult(System.out));
}
}
输出如下所示:
<a>foo
bar
</a>
是否可以防止 Transformer 逃逸 CR?
最佳答案
如果输入 XML 包含文字 CR 字符,它们将在解析过程中被删除。 XML 解析器将行结尾标准化为单个 NL 字符;但如果 CR 转义为
,则这不适用。
因此,如果文本节点包含 CR 字符,XSLT 处理器会假设您已努力将其放在那里并且您确实需要它,因此它会以这样的方式输出它,即它可以在往返中存活下来生成的序列化输出由 XML 解析器重新处理。
当然,您可以删除 XSLT 代码中的 CR 字符,就像您可以删除任何其他字符一样。但这不会自动发生。
关于java - 变压器脱离 CR,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58431758/