出于某种原因,我的下面的代码给出了例外: 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)
这有什么问题?
我认为问题在于,当您将字符串作为参数传递给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)