【问题标题】:Show XML from XSLT transformation in JavaFX TextArea在 JavaFX TextArea 中显示来自 XSLT 转换的 XML
【发布时间】:2017-05-30 21:55:30
【问题描述】:

我正在尝试创建一个应用程序,在该应用程序中,我将 XML 格式的文本写入 TextArea 并应用缩进转换(使用 XSLT),最终将其显示在 out 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());

}
}

我做错了吗?我该如何解决?

提前致谢。

【问题讨论】:

    标签: java xml xslt javafx


    【解决方案1】:

    如果您想要一个身份转换,那么(使用 JAXP)或者创建一个新的转换器而不提供样式表(https://docs.oracle.com/javase/8/docs/api/javax/xml/transform/TransformerFactory.html#newTransformer--),或者确保您提供的 XSLT 实际上正在执行复制,您的代码具有顶级@我认为 987654322@ 甚至不应该编译,你宁愿想要&lt;xsl:template match="/"&gt;&lt;xsl:copy-of select="."/&gt;&lt;/xsl:template&gt;

    【讨论】:

      猜你喜欢
      • 2013-04-25
      • 1970-01-01
      • 1970-01-01
      • 2011-12-15
      • 2019-10-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-28
      相关资源
      最近更新 更多