1

您好,我想在我的 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 文件夹中。

任何人都知道为什么转换不起作用?

4

2 回答 2

1

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

如果有人有任何让 Saxon 在 Android 上工作的经验,我们很想听听他们。

于 2012-09-27T14:17:24.333 回答
0

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

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

于 2014-08-25T14:49:30.267 回答