Java 漂亮的打印XML文件 原始问题
我正在尝试在没有任何外部库的情况下预打印XML文件,但无法让Java实现我想要的功能。。。这是我迄今为止的代码(我添加了类似问题的任何解决方案!): 具有如下所示的输入文件:Java 漂亮的打印XML文件 原始问题,java,xml,xslt,dom,java-8,Java,Xml,Xslt,Dom,Java 8,我正在尝试在没有任何外部库的情况下预打印XML文件,但无法让Java实现我想要的功能。。。这是我迄今为止的代码(我添加了类似问题的任何解决方案!): 具有如下所示的输入文件: <?xml version="1.0" encoding="UTF-8" standalone="no"?><root><test><item0>a</item0><item1>b</item1></test></root
<?xml version="1.0" encoding="UTF-8" standalone="no"?><root><test><item0>a</item0><item1>b</item1></test></root>
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<root>
<test>
<item0>a</item0>
<item1>b</item1>
</test>
</root>
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<root>
<test>
<item0>a</item0>
<item1>b</item1>
</test>
</root>
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<root>
<test>
<item0>a</item0>
<item1>b</item1>
</test>
</root>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
现在,这将从原始问题的单行文件创建一个漂亮的打印文件,从而回答部分问题!我不知道到底是什么问题,但不管怎样,现在起作用了^^
但我也有一些由我的程序读取和写入的旧文件,看起来像这样:
<?xml version="1.0" encoding="UTF-8" standalone="no"?><root><test><item0>a</item0><item1>b</item1></test></root>
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<root>
<test>
<item0>a</item0>
<item1>b</item1>
</test>
</root>
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<root>
<test>
<item0>a</item0>
<item1>b</item1>
</test>
</root>
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<root>
<test>
<item0>a</item0>
<item1>b</item1>
</test>
</root>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
A.
B
它们在每个节点后都有一个换行符,但没有缩进。我的代码保持文件不变。。。如何纠正这一点?当您可以简单地使用进行转换时,为什么还要费心处理复杂且容易出错的Java代码,如下所示:
<?xml version="1.0" encoding="UTF-8" standalone="no"?><root><test><item0>a</item0><item1>b</item1></test></root>
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<root>
<test>
<item0>a</item0>
<item1>b</item1>
</test>
</root>
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<root>
<test>
<item0>a</item0>
<item1>b</item1>
</test>
</root>
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<root>
<test>
<item0>a</item0>
<item1>b</item1>
</test>
</root>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
当此转换应用于提供的XML文档时:
<?xml version="1.0" encoding="UTF-8" standalone="no"?><root><test><item0>a</item0><item1>b</item1></test></root>
<?xml version="1.0" encoding="utf-8"?>
<root>
<test>
<item0>a</item0>
<item1>b</item1>
</test>
</root>
ab
生成一个漂亮的、更重要的是统一的(每个XSLT处理器)输出:
<?xml version="1.0" encoding="UTF-8" standalone="no"?><root><test><item0>a</item0><item1>b</item1></test></root>
<?xml version="1.0" encoding="utf-8"?>
<root>
<test>
<item0>a</item0>
<item1>b</item1>
</test>
</root>
A.
B
您已经标记了此XSLT,如果应用了以下XSLT样式表:
XSLT1.0
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xalan="http://xml.apache.org/xalan"
exclude-result-prefixes="xalan">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes" xalan:indent-amount="4"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
对于XML输入,结果将是:
<?xml version="1.0" encoding="UTF-8"?>
<root>
<test>
<item0>a</item0>
<item1>b</item1>
</test>
</root>
A.
B
现场演示:
请注意,这些项目“印刷精美”,如下所示:
a
而不是如你的帖子所示:
<item0>
a
</item0>
A.
这表示XML内容负载的变化。运行代码时,
t工厂的类是什么?您使用什么JDK?tfactory是javax.xml.transform.TransformerFactory类型,我使用1.8.0_66-b18(2015年11月11日发布)以及tfactory
的实现类是什么,即当您打印System.out.println(tfactory.getClass())
class com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactory时,使用JDK 1.8.0_45(具有相同的transformer实现),我在运行代码时获得了一个漂亮的缩进输出。这在使用Xalan处理器时不会产生结果(OP显然是这样)-请参阅:中的固定内容不匹配question@user2336377你的问题没有回答吗?