2017-06-28 4 views
1

私はXSLTXMLファイルを処理するために使用する一般的なJavaコードは以下のとおりです。JavaアプリケーションからXSLT 3.0を使用するには?

public static final String transformXmlDocument(String inputXmlString, 
      File xsltFile) { 

     TransformerFactory factory = TransformerFactory.newInstance(); 
     StreamSource xslt = new StreamSource(xsltFile); 

     StreamSource text = new StreamSource(new StringReader(inputXmlString)); 
     StringWriter writer = new StringWriter(); 
     StreamResult textOP = new StreamResult(writer); 

     try { 
      Transformer transformer = factory.newTransformer(xslt); 
      transformer.transform(text, textOP); 
     } catch (TransformerConfigurationException e) { 
      e.printStackTrace(); 
     } catch (TransformerException e2) { 
      e2.printStackTrace(); 
     } 
     String results = writer.toString(); 

     return results; 
} 

私は次の関数を使用するXSLT 3.0のバージョンを処理する必要があります。

解析-XMLフラグメントを(

:)

それはXSLTことわざのこのバージョンのためにエラーがスローされます

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<data> 
    <![CDATA[<pi>hi</pi>]]> 
</data> 

XSLTコード:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    xmlns:data="http://example.com/data" 
    xmlns:text="http://exselt.net/text" 
    xmlns:err="http://www.w3.org/2005/xqt-errors" 
    exclude-result-prefixes="xs xsl data text err" 
    version="3.0"> 

<xsl:output indent="yes"/> 

    <xsl:template match="/"> 
     <xsl:variable name="sample"> 
      <xsl:copy-of select="parse-xml-fragment('&lt;gi&gt;surface&lt;/gi&gt;&lt;gi&gt;surface&lt;/gi&gt;&lt;gi&gt;surface&lt;/gi&gt;')" /> 
     </xsl:variable> 
     <final> 
      <xsl:copy-of select="data/pi"/> 
      <xsl:for-each select="$sample/gi"> 
       <pi><xsl:value-of select="."/></pi> 
      </xsl:for-each> 
     </final> 
    </xsl:template> 

</xsl:stylesheet> 

期待出力:

<final> 
    <pi>hi</pi> 
    <pi>surface</pi> 
    <pi>surface</pi> 
    <pi>surface</pi> 
    </final> 
機能

マイ入力XMLとして見つかりませ

構文解析XMLフラグメント()

誰も解決策を提供していただけますか?

答えて

1

Saxon 9.8 HEまたはPEまたはEEがクラスパスにあることを確認する必要があります。HEはSourceforgeおよびMaven、PEおよびEEはsaxonica.comです。 http://saxonica.com/html/documentation/about/installationjava/installingjava.htmlhttp://saxonica.com/html/documentation/using-xsl/embedding/jaxp-transformation.htmlを参照してください。特定のエディションをインストールすると、たとえば <:http://saxonica.com/html/documentation/javadoc/net/sf/saxon/TransformerFactoryImpl.html代わりに、直接あなたがサクソン9.8を持っていると仮定すると、JAXPクラスローダのメカニズムに頼るのHEは、あなたが、私はMavenの依存関係を追加し、あなたの迅速な対応のために

TransformerFactory factory = new net.sf.saxon.TransformerFactoryImpl(); 
+0

おかげで

TransformerFactory factory = TransformerFactory.newInstance(); 

を置き換えることができますインストール! - https://mvnrepository.com/artifact/net.sf.saxon/Saxon-HE - > \t \t \t \t net.sf.saxon上述したよう\t \t サクソン-HE \t \t 9.8.0-1 \t \t もTransformerFactoryのクラスを置き換えるが、私はまだ(それはパース-XMLフラグメント見つからないというエラーが出る)など機能 。 私は何かを逃していますか? – divya

+0

質問を編集し、XML入力、XSLTコードの最小限の完全なスニペットを正確なエラーメッセージと共に表示して、問題の再現を可能にしてください。 'parse-xml-fragment'に何も渡していませんか? –

+0

コマンドラインから同じコードを実行しても動作しますが、Eclipseではなく、要求されたとおりに質問を編集しました – divya

関連する問題