我试图创建一个应用程序,在其中我将XML格式的文本写入TextArea并应用缩进转换(使用XSLT),最后在TextArea中显示它。
但我收到的只是图像中的XML元素的内容:
我在Java中的代码如下:
public class Vista extends Application{
Label LIn;
TextArea TIn;
Label LOut;
TextArea TOut;
Button BTransform;
String xslt = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" +
"<xsl:stylesheet version=\"1.0\" xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\"> " +
"<xsl:output method=\"xml\" version=\"1.0\" encoding=\"UTF-8\" indent=\"yes\"/> " +
"<xsl:copy-of select=\".\"/> " +
"</xsl:stylesheet>";
@Override
public void start(Stage StageInicial) throws Exception {
StageInicial.setTitle("XML Indent");
LIn = new Label("XML Entrada:");
TIn = new TextArea();
LOut = new Label("XML Salida:");
TOut = new TextArea();
BTransform = new Button("Indent XML!");
BTransform.setOnAction(action -> {
try {
transformation();
} catch (TransformerException e) {
e.printStackTrace();
}
});
GridPane gridPane = new GridPane();
gridPane.add(LIn, 0, 0);
gridPane.add(TIn, 0, 1);
gridPane.add(LOut, 1, 0);
gridPane.add(TOut, 1, 1);
gridPane.add(BTransform, 0, 3, 2, 2);
gridPane.setHgap(10);
gridPane.setVgap(10);
Scene scene = new Scene(gridPane, 1048, 720);
StageInicial.setScene(scene);
StageInicial.show();
}
public void transformation() throws TransformerException{
StringReader reader = new StringReader(TIn.getText());
StringReader readerXSLT = new StringReader(xslt);
StringWriter writer = new StringWriter();
TransformerFactory factory = TransformerFactory.newInstance();
Transformer transformer = factory.newTransformer(new javax.xml.transform.stream.StreamSource(readerXSLT));
transformer.transform(
new javax.xml.transform.stream.StreamSource(reader),
new javax.xml.transform.stream.StreamResult(writer));
TOut.setText(writer.toString());
}
}
我做错了吗?我该怎么办呢?
提前致谢。
答案 0 :(得分:0)
如果你想进行身份转换,那么(使用JAXP)要么创建一个新的Transformer而不提供样式表(https://docs.oracle.com/javase/8/docs/api/javax/xml/transform/TransformerFactory.html#newTransformer--),要么确保你提供的XSLT实际上是在执行副本,你的代码是顶级的级别"<xsl:copy-of select=\".\"/> "
甚至不应该编译我认为,你宁愿想<xsl:template match="/"><xsl:copy-of select="."/></xsl:template>
。