当前位置: 首页 > 知识库问答 >
问题:

如何从Java应用程序中使用XSLT3.0?

云镜
2023-03-14

我用于处理XSLTXML文件的一般java代码是:

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

我必须处理3.0版本的XSLT才能使用以下函数:

parse-xml-fragment()

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

谁能提供一个解决方案吗?

共有1个答案

冯敏达
2023-03-14

您需要确保Saxon9.8 HE或PE或EE在您的类路径上,他可以在Sourceforge和Maven上使用,也可以在Saxonica.com的商业版PE和EE上使用。请参见http://saxonica.com/html/documentation/about/installationjava/installingjava.html和http://saxonica.com/html/documentation/using-xsl/embedding/jaxp-transformation.html。这两个文件建议,一旦您安装了特定版本,就直接使用http://saxonica.com/html/documentation/javadoc/net/sf/Saxon/transformerfactoryimpl.html,而不是依赖于JAXP类加载器机制,因此假设您安装了Saxon 9.8,您可以替换他

    TransformerFactory factory = TransformerFactory.newInstance();

    TransformerFactory factory = new net.sf.saxon.TransformerFactoryImpl();
 类似资料:
  • 问题内容: 用代码退出Java应用程序的最佳方法是什么? 问题答案: 您可以用于此目的。 根据oracle的Java 8文档: 终止当前正在运行的Java虚拟机。参数用作状态码;按照惯例, 非零状态代码表示异常终止 。 此方法在类Runtime中调用exit方法。此方法永远不会正常返回。 该调用实际上等效于该调用:

  • 问题内容: 我已经从http://code.google.com/p/facebook-java- api/ 下载了facebook-java- api-3.0.2-bin 以连接到脸书。我想在我的Java应用程序中使用此api连接Facebook。我正在为此目的开发桌面应用程序。我已经在Face book上创建了帐户并注册为开发人员。 是否可以从我的Java应用程序连接Facebook? 如果是

  • 问题内容: 我尝试使用下面的代码来运行我从Apple脚本创建的独立实用程序应用程序,但是出现“无文件或目录不存在”错误。 我在项目,dist,父目录中放置了相同的副本(用于测试),但没有帮助。 因此,我的问题是:我对运行该应用程序的调用是否不好(也许是因为它不是Windows exe)?如何从Java运行Mac App? 谢谢 问题答案: Mac App Bunde不是可执行文件,而是具有特殊结构

  • 我必须使用java应用程序打印PDF文件。我尝试过这样的方法: 当我在假打印机上测试时(我使用PDFCreator作为打印机),一切正常,但当我尝试在物理打印机上打印时,什么都没有发生。 然后我用了PDFBox。文件是打印出来的,但文字之间有奇怪的点,在不应该的地方。 那么,也许有人有从java应用程序打印PDF的经验,可以分享这些信息?

  • 我不知道如何用GraalVM的SDK编译我的Java应用程序。我相信在使用GraalVMbinary时,默认情况下会将它们添加到类路径中。 我的hello world测试应用程序: 输出: 我使用的是用OpenJDK 11构建的GraalVM二进制文件: 当深入挖掘时,我发现这些类包含在其中。jmod档案位于:

  • 我一直在尝试为javafx编译和运行这个示例 然后我试着运行这个例子 $java--mode-path"PATH_TO_FX":mods-m hellofx/hellofx。HelloFX 启动层初始化时出错java.nio.file.InvalidPathException:非法字符 所以我认为通往FX的路径是个问题,但事实并非如此。 $java——模块路径src:mods-m hellofx/