java - 处理 xslt 包含中的非法 URI 字符

标签 java xslt uri xsl-fo invalid-characters

在 xsl 转换中,我有一个 xslt 文件,其中包含一些其他 xslt。问题是这些 xslt 的 URI 包含非法字符,特别是“##”。 xslt 看起来像这样:

<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;
}

有没有办法可以使用相对路径而不是绝对路径?

谢谢

最佳答案

要避免 MalformedURIException,请将第二个或两个 # 替换为 %23

参见https://stackoverflow.com/a/5007362/4092205

关于java - 处理 xslt 包含中的非法 URI 字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41020039/

相关文章:

android - 尝试从 URI 启动时出现 "Exported activity does not require permission"

http - 在 Camel HTTP4 中使用包含下划线的 URI

java - GSON:如何从 Json 获取不区分大小写的元素?

java - MyBatis Oracle 调用 PLS-00306 : wrong number or types of arguments in call Error

xslt - 复杂的 XSLT 分割?

javascript - XSLT 如果单击复选框则禁用文本框

xslt - 如何根据层次结构级别删除重复项?

java - 为什么 Netbeans 不签署某些 jar?

java - 处理文本以仅使用数组在java中构建字典?

java - URISyntaxException 禁用创建新 GUI 的能力