2012-01-19 24 views
2

私はxsl変換が必要なアンドロイド(2.2)プロジェクトに取り組んでいます。以下のコードは、標準的な非アンドロイドJavaプロジェクトで動作します。ANDROIDでXSLTを使用してXMLをHTMLに変換する方法は?

public static String transform() throws TransformerException { 
    Source xmlInput = new StreamSource(new File("samplexml.xml")); 
    Source xslInput = new StreamSource(new File("samplexslt.xslt")); 

    TransformerFactory factory = TransformerFactory.newInstance(); 
    Transformer transformer = factory.newTransformer(xslInput); 

    OutputStream baos = new ByteArrayOutputStream(); 
    Result result = new StreamResult(baos); 
    transformer.transform(xmlInput, result); 
    return baos.toString(); 
} 

私はAndroid上で同様の機能が必要です。私は以下のコードを試してみました

  1. samplexml.xml
  2. samplexslt.xslt

(これらのファイルの内容はhereから来

:。このために、私は生のリソース/下の2つのファイルを作成しました&それは動作しません(StreamSourceコンストラクタargに注意してください)。

私は仕様がsystemIdを設定する必要があると思った。しかし、私は上記のコードを動作させることができませんでした。

したがって、アンドロイドプロジェクトでは、どのようにxslt変換を処理するのですか?あなたの考えを提供してください。

答えて

0

私はXSLTを使ったことは一度もありませんでしたが、コードを見ると論理的にはその行にNPEを引き起こす可能性が2つしかありません。最初はがnullであるかもしれませんが、意味がありません。 openRawResource(R.raw.samplexslt)は、使用するStreamSourceコンストラクタのための有効なInputStreamを返すために失敗している示唆して犯人であるとしてxslInput

。それはxslInputが実際にnullであることが判明した場合、それはopenRawResource(...)が適切に/プロセスに.xsltファイルを見つけることができません示唆...

if (xslInput != null { 
    Transformer transformer = factory.newTransformer(xslInput); 
    ... 
} 
else 
    Log.d("SomeTAG", "xslInput is null!!!"); 

などでログ文を入れてみてください。私たちはそのwe Cannot usethisin a static contextを知っているし、あなたの静的メソッドtransform()でこれをやっているように、その場合、私は...名前で.xsltファイルを開くためにAssetManagerを使用して

AssetManager am = this.getAssets(); 
Source xslInput = new StreamSource(am.open("samplexslt.xslt")); 
+0

お返事ありがとうございます。実際、「変圧器」はヌルとして戻ってきています。申し訳ありませんが、それについて明確ではありません。さて、あなたが提案したAssetManagerのアプローチを試しましたが、それでもNPEを取得します。 – Ravi

+0

OK、それは変です。現時点では、なぜそれが起こるのかについては何の理由も考えられません。 – Squonk

1

をお勧めしたいです。 this_

public class YourLoadXSLClass extends Activity { 
static Resources res; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    res = getResources(); 

    String strHTML = transform(); 
    // Other code..... 

} 

/* 
* Your method that Transform CSLT. 
*/ 
public static String transform() throws TransformerException { 
    TransformerFactory factory = TransformerFactory.newInstance(); 

    // Now your raw files are accessible here. 
    Source xmlInput = new StreamSource(
      LoadXSLTinWebview.res.openRawResource(R.raw.samplexml)); 
    Source xslInput = new StreamSource(
      LoadXSLTinWebview.res.openRawResource(R.raw.samplexslt)); 

    Transformer transformer = factory.newTransformer(xslInput); 

    OutputStream baos = new ByteArrayOutputStream(); 
    Result result = new StreamResult(baos); 
    transformer.transform(xmlInput, result); 
    return baos.toString(); 
} 

} 

Hereはニードフルを行う完全なクラスコードであるようにあなたはそれを行うことができます。これがあなたを助けることを願っています&すべて!

+0

私の一日を保存していただきありがとうございます;)私は何か私のエラー(バージョンなし)、しかしこの答え(ソースを含む)と私は問題なく動作transformfactoryを持っているトランスフォーマー(別の例から)の文字列を使用! –

関連する問題