2016-12-07 26 views
0

xsl変換では、他のxsltを含むxsltファイルがあります。問題は、これらのxsltのURIには不正な文字、特に '##'が含まれていることです。xsltインクルードでの不正なURI文字の処理

<xsl:include href="/appdm/tomcat/webapps/sentys##1.0.0/WEB-INF/classes/xslt/release_java/xslt/gen.xslt" />

と私はJavaのTransformerをインスタンス化しようとすると、私はエラーを取得:

javax.xml.transform.TransformerConfigurationException: javax.xml.transform.TransformerConfigurationException: javax.xml.transform.TransformerException: org.xml.sax.SAXException: org.apache.xml.utils.URI$MalformedURIException: Fragment contains invalid character:#

これは、Javaコードです:

public String xslTransform2String(String sXml, String sXslt) throws Exception { 
    String sResult = null; 
    try { 
     Source oStrSource = createStringSource(sXml); 

     DocumentBuilderFactory oDocFactory = DocumentBuilderFactory.newInstance(); 
     oDocFactory.setNamespaceAware(true); 

     //sXslt is the xslt content with the inclusions 
     //<xsl:include href="/appdm/tomcat/webapps/sentys##1.0.0/WEB-INF/classes/xslt/release_java/xslt/gen.xslt" />" 
     Document oDocXslt = oDocFactory.newDocumentBuilder().parse(new InputSource(new StringReader(sXslt))); 
     Source oXsltSource = new DOMSource(oDocXslt); 

     StringWriter oStrOut = new StringWriter(); 
     Result oTransRes = createStringResult(oStrOut); 
     Transformer oTrans = createXsltTransformer(oXsltSource); 

     oTrans.transform(oStrSource, oTransRes); 
     sResult = oStrOut.toString(); 
    } catch (Exception oEx) { 
     throw new BddException(oEx, XmlProvider.ERR_XSLT, null); 
    } 
    return sResult; 
} 

private Transformer createXsltTransformer(Source oXsltSource) throws Exception { 
    Transformer transformer = getXsltTransformerFactory().newTransformer(
      oXsltSource); 
    ErrorListener errorListener = new DefaultErrorListener(); 
    transformer.setErrorListener(errorListener); 

    return transformer; 
} 
XSLTは、このようになります。

絶対パスの代わりに相対パスを使用する方法はありますか?

は、第二または%23との両方#を置き換え、MalformedURIExceptionを避けるために、あなたに

+1

を参照してくださいあなたはチェックしましたか? – amishra

+0

残念ながら、これはUnixファイルシステム上の実際の経路です。これは、顧客のバージョニングシステムからアプリケーションWARに渡されます。 – koopa

答えて

関連する問題