私はXSLT
とXML
ファイルを処理するために使用する一般的な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('<gi>surface</gi><gi>surface</gi><gi>surface</gi>')" />
</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フラグメント()
誰も解決策を提供していただけますか?
おかげで
を置き換えることができますインストール! - 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
質問を編集し、XML入力、XSLTコードの最小限の完全なスニペットを正確なエラーメッセージと共に表示して、問題の再現を可能にしてください。 'parse-xml-fragment'に何も渡していませんか? –
コマンドラインから同じコードを実行しても動作しますが、Eclipseではなく、要求されたとおりに質問を編集しました – divya