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

あなたはかなり古いバージョン(おそらく6.5?)を実行しているように見える「saxon.jar」に言及しています。もっと最近のものを試してみたいと思うかもしれません。ただし、Saxon は Android ではテストもサポートもされていません。問題があることはわかっていますが、それらが何であるか、および簡単な回避策があるかどうかを確認するための本格的な作業は行っていません (Android プラットフォームに存在しない機能に依存しているため、コードは Android 用にコンパイルされません)。 、そして最初にやらなければならないことは、それらの依存関係を取り除くことです.)

Saxon を Android で動作させた経験のある方がいらっしゃいましたら、ぜひお聞かせください。

于 2012-09-27T14:17:24.333 に答える
0

Android は軽量 XSLT パーサー LibXML2 と軽量 XSLT 標準 XSLT-version-1 を使用します。

複雑な XSLT スクリプト (XSLT2 固有の関数として)の場合は、 EXSLT の共通モジュールおよび/または「関数の登録」を確認hasExsltSupport()して使用し、XSLT スクリプトから Java 関数を呼び出します。

于 2014-08-25T14:49:30.267 に答える