2012-02-02 6 views
1

XSLTの処理時にXMLコンテンツを含むパラメータを渡したいとします。 はここに私のコードです:JavaでのXSLT処理:パラメータ内のXMLコンテンツの受け渡し

import javax.xml.transform.Result; 
import javax.xml.transform.Source; 
import javax.xml.transform.Transformer; 
import javax.xml.transform.TransformerException; 
import javax.xml.transform.TransformerFactory; 
import javax.xml.transform.stream.StreamResult; 
import javax.xml.transform.stream.StreamSource; 

File xmlFile = new File(xmlFilePath); 
File xsltFile = new File(xslFilePath); 
Source xmlSource = new StreamSource(xmlFile); 
Result result = new StreamResult(System.out); 

TransformerFactory transFact = TransformerFactory.newInstance(); 
Transformer trans = transFact.newTransformer(xsltSource); 
trans.setParameter("foo", "<bar>Hello1</bar><bar>Hello2</bar>"); 
trans.transform(xmlSource, result); 

は、その後、私は私のXSLファイルの「バー」タグに含まれる値を選択したいと思います。

<xsl:param name="foo"/> 
... 
<xsl:value-of select="$foo//foo[1]" /> 

しかし、これは動作しません、私は、このエラーメッセージが表示されます:

org.apache.xpath.objects.XString cannot be cast to org.apache.xpath.objects.XNodeSet 

だから私は、私は私のsetParameterをメソッドにXMLオブジェクトを渡す必要がありますね、しかしどれ? XNodeSetオブジェクトを作成する簡単な例が見つかりません...

どうすればいいですか?おかげさまで

+0

なぜパラメータを渡す前にタグを取り除かないのですか? – quaylar

+0

*解析された* XML文書を生成し、これをパラメータの値として渡す必要があります。*渡す文字列*ではありません。 XMLDocument型のパラメータの受け渡しがどのようにサポートされているかについては、XSLTプロセッサのドキュメントを参照してください。 –

+0

@Marcたぶん、このパラメータをどのように処理したいのかを反映するために質問を更新する必要があります。表示したくないからです。 – quaylar

答えて

2

XSLTプロセッサのドキュメントで、どのような種類のパラメータが許可されているか、ノードで渡すことができるかどうか、どのようにして文字列を渡すことができないかを確認したい場合があります。 http://www.saxonica.com/html/documentation/using-xsl/embedding/jaxp-transformation.htmlhttp://www.saxonica.com/html/documentation/javadoc/net/sf/saxon/jaxp/TransformerImpl.html#setParameter(java.lang.String,%20java.lang.Object)を正しく理解すれば、SaxonではノードをNodeInfoの形式で渡すことができます。

+0

XSLでノードを選択できるようにxmlを渡したいので、ありがとうございます。 – Marc

6

あなたはサクソンを使用している場合は、最も簡単な解決策は、パラメータ値としてのStreamSourceを渡すことです:

setParameter("foo", new StreamSource(new StringReader("<bar>baz</bar>"))); 

しかし、これは他のプロセッサでは動作しない可能性があります:JAXPは、オブジェクトの種類をすることができ、実装定義のそれを残しパラメータ値として渡すことができます。

関連する問題