使用XSLT删除PrettyPrint

Thr*_*eaT 0 java xml xslt

出于某种原因,我的下面的代码给出了例外: javax.xml.transform.TransformerConfigurationException: Could not compile stylesheet

public String removePrettyPrint(String xml) throws TransformerException, TransformerFactoryConfigurationError {
    String result = "";
    TransformerFactory factory = TransformerFactory.newInstance();
    String source = "<?xml version=\"1.0\"?><xsl:stylesheet version=\"1.0\" xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\">    <xsl:output indent=\"no\" />    <xsl:template match=\"@*|node()\">        <xsl:copy>            <xsl:apply-templates select=\"@*|node()\"/>        </xsl:copy>    </xsl:template></xsl:stylesheet>";
    Source xslt = new StreamSource(source);
    Transformer transformer = factory.newTransformer(xslt);
    Source text = new StreamSource(xml);
    transformer.transform(text, new StreamResult(result));
    return result;
}
Run Code Online (Sandbox Code Playgroud)

这有什么问题?

Tim*_*m C 5

我认为问题在于,当您将字符串作为参数传递给StreamSource时,它期望它是XML文档的URL,而不是实际的XML字符串本身.

你可能需要在这里使用StringReader阅读器:

String source = "...XSL Here...";
StringReader xsltReader = new StringReader(source);
Source xslt = new StreamSource(xsltReader);
Transformer transformer = factory.newTransformer(xslt);
Run Code Online (Sandbox Code Playgroud)

假设您传入的是XML,而不是XML文档的URL,您可能必须对XML执行相同的操作.

StringReader xmlReader = new StringReader(xml);
Source text = new StreamSource(xmlReader);
Run Code Online (Sandbox Code Playgroud)

对于转换本身,您可能需要使用StringWriter

StringWriter writer = new StringWriter();
transformer.transform(text, new StreamResult(writer));
result = writer.toString();
Run Code Online (Sandbox Code Playgroud)