【问题标题】:xsl multiple outputs using java使用java的xsl多个输出
【发布时间】:2015-02-05 17:02:22
【问题描述】:

我想编写一个 xsl 文档,根据 xml 在 .html 中生成多于 1 的输出

xml:

<?xml version="1.0" encoding="UTF-8"?>

<book>
    <title>Libro</title>
    <chapter>
        <title>Chapter 1</title>
        <content></content>
    </chapter>
    <chapter>
        <title>Chapter 2</title>
        <content></content>
    </chapter>
</book>

我想为 xml 中的每个“章节”获取一个 html,在这种情况下,结果必须是 2 个 html 文档

xsl:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
                xmlns:saxon="http://saxon.sf.net/" extension-element-prefixes="saxon"
                version="1.1">

<xsl:output method="html" indent="yes"/>

<xsl:template match="./book/">
    <xsl:for-each select="./chapter">
        <xsl:variable name="filename" select="concat(title,'.html')"/>
        <xsl:document href="{$filename}">
            <html>
                <head>
                    <title>
                        <xsl:value-of select="title" />
                    </title>
                </head>
                <body>
                    <xsl:value-of select="body" />
                </body>
            </html>
        </xsl:document>
    </xsl:for-each>
</xsl:template>

</xsl:stylesheet>

java代码:

DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.parse(input);
// Use a Transformer for output
TransformerFactory tFactory = TransformerFactory.newInstance();
Transformer transformer = tFactory.newTransformer(new StreamSource(xslt));

DOMSource source = new DOMSource(document);
StreamResult result = new StreamResult(System.out);
transformer.transform(source, result);

我有一些问题

1.- 我运行了程序,但出现了这个错误:

java.lang.RuntimeException: Elemento 'http://www.w3.org/1999/XSL/Transform:document' de XSL no soportado

我不知道为什么,我已经在我的 xsl:stylesheet 中添加了路径,但似乎无法正常工作

我应该换吗?

2.- 将 saxon 库添加到我的 java 项目后,出现此错误:

元素上不允许使用@href 属性

我该如何解决这个问题?

【问题讨论】:

    标签: java html xml xslt


    【解决方案1】:

    我看到两个问题:

    1. 在您的 XSL 文件中,您应该使用 xsl:result-document 而不是 xsl:document

    2. 当您对 Transformer 对象调用 transform 时,结果应该是一个空文档:transformer.transform(source, new DOMResult());

    【讨论】:

    • 谢谢,xsl:result-document 是问题的一部分,我不得不将 saxon 库添加到我的项目中,这就是它的工作原理
    • 为了完整起见,需要进行此调用(或其等效项):System.setProperty("javax.xml.transform.TransformerFactory", "net.sf.saxon.TransformerFactoryImpl"); Saxon 解析器支持 result-document 元素,允许转换生成多个输出文档。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多