使用java的xsl多输出

时间:2014-12-08 04:04:42

标签: java html xml xslt

我想编写一个xsl文档,根据xml

生成.html中1输出的motre

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>

我想为每个&#34;章节&#34;获得一个html;在xml中,在这种情况下,结果必须是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&#39; http://www.w3.org/1999/XSL/Transform:document&#39; de XSL no soportado

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

我应该改变吗?

2.-我在我的java项目中添加了saxon库后出现此错误:

元素

上不允许使用属性@href

如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

我看到两个问题:

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

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