我有一个XSLT文件,我想用它来创建两个单独的XML文件/字符串。问题是我无法使用相同的模板匹配。
如果我有这个:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="Frame/AAA">
<xsl:for-each select=".">
<Frame xmlns="MyNamespace.com">
<BBB>
<!-- Stuff here -->
</BBB>
</Frame>
</xsl:for-each>
</xsl:template>
<xsl:template match="Frame/AAA">
<xsl:for-each select=".">
<Frame xmlns="MyNamespace.com">
<WWW>
<!-- Stuff here -->
</WWW>
</Frame>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
XML文件:
<Frame>
<AAA>
<!-- Stuff here -->
</AAA>
<Frame>
所以我想使用这两个模板并创建两个XML文件。但是,不允许使用两个相同的模板,因为它不知道在哪里查看。
这是我用来创建XML文件的Java代码:
// Get stylesheet (xslt) and xml data file
File stylesheet = new File(xsltFilepath);
InputSource inputSource = new InputSource(new ByteArrayInputStream(xmlString.getBytes()));
// Turn data file into document
Document document = DocumentBuilderFactory.newInstance()
.newDocumentBuilder().parse(inputSource);
// Hold XML markup
StreamSource stylesource = new StreamSource(stylesheet);
// Turn source into a transformer object
Transformer transformer = TransformerFactory.newInstance().newTransformer(stylesource);
// Convert to a string
StringWriter stringWriter = new StringWriter();
transformer.transform(new DOMSource(document), new StreamResult(stringWriter));
// Return the string
return tringWriter.toString();
我如何实现我的目标?
答案 0 :(得分:1)
如果您使用XSLT 2.0和模式,您可以使用例如
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="/">
<xsl:apply-templates/>
<xsl:apply-templates mode="m2"/>
</xsl:template>
<xsl:template match="Frame/AAA">
<Frame xmlns="MyNamespace.com">
<BBB>
<!-- Stuff here -->
</BBB>
</Frame>
</xsl:template>
<xsl:template match="Frame/AAA" mode="m2">
<xsl:result-document href="result2.xml">
<Frame xmlns="MyNamespace.com">
<WWW>
<!-- Stuff here -->
</WWW>
</Frame>
</xsl:result-document>
</xsl:template>
</xsl:stylesheet>