繁体   English   中英

Java / Android中以编程方式进行的Saxon XSLT转换

[英]Programmatically Saxon XSLT Transformation in Java/Android

嗨,我想在我的Android应用程序中使用xsl样式表以编程方式转换xml。

这是我的转换器功能:

//-----------------------------XLST SAXON TRANSFORMATION--------------------
public static void simpleTransform(String sourcePath, String xsltPath,
        String resultDir) {
        TransformerFactory tFactory = TransformerFactory.newInstance();
        try {
            Transformer transformer =
                    tFactory.newTransformer(new StreamSource(new File(xsltPath)));

            transformer.transform(new StreamSource(new File(sourcePath)),
    new StreamResult(new File(resultDir)));
        } catch (Exception e) {
            e.printStackTrace();
        }
}

并用他的代码开始转换:

           private static String sourcePath;
           private static String xsltPath = SD_CARD_PATH +"/"+ "ets4_calimero_gui.xsl";
           private static String resultDir;

           sourcePath = SD_CARD_PATH + "/"+Name+".xml"; 
           resultDir = SD_CARD_PATH + "/"+Name+"_xlst.xml";

           System.setProperty("javax.xml.transform.TransformerFactory",
                "net.sf.saxon.TransformerFactoryImpl");
           simpleTransform(sourcePath, xsltPath, resultDir);
           Log.d("XLST","XML saved as" + resultDir);

但是创建的.xml文件为空,logcat引发以下错误:

09-27 13:44:41.940: W/System.err(7736): (Location of error unknown)java.io.IOException: Couldn't open file:///mnt/sdcard/rg.xml

但是rg.xml存在,我可以在外部SD卡上看到它。 我还添加了saxon.jar作为类路径,并将其插入到libs文件夹中。

有人知道为什么转换不起作用吗?

您提到“ saxon.jar”,这似乎使您似乎正在运行的是旧版本(也许是6.5?)。 您可能想尝试一些新的东西。 但是,未在Android上测试或支持Saxon。 我们知道有问题,但是我们没有做任何认真的工作来找出它们是什么,以及是否有一个简单的解决方法(该代码无法为Android编译,因为它依赖于Android平台上不存在的功能,而我们要做的第一件事就是摆脱这些依赖。)

如果任何人有让Saxon在Android上运行的经验,我们都希望听到有关它们的信息。

Android使用轻量级XSLT解析器LibXML2和轻量级XSLT标准XSLT-version-1。

对于复杂的XSLT脚本(作为特定于XSLT2的函数),请检查hasExsltSupport()并使用EXSLT的 hasExsltSupport() 模块和/或“注册函数”从XSLT脚本中调用Java函数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM