У меня есть файл XSLT, который я хочу использовать для создания двух отдельных файлов XML/Strings. Проблема в том, что я не могу использовать один и тот же шаблон.Создайте два XML-файла из одного XSLT (Java)
Если у меня есть это:
<?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-файлов. Однако использование двух одинаковых шаблонов не допускается, так как не знает, где искать.
Это код Java я использую для создания XML-файлы:
// 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();
Как я могу добиться того, чего я хочу?
Вы можете создавать только два отдельных результирующих документа, если вы используете Saxon 9 и XSLT 2.0 и 'xsl: result-document' или Xalan определенные расширения. Что касается обработки узла дважды с помощью разных шаблонов, используйте способы для различения шаблонов. –
Спасибо, я рассмотрю XSLT 2.0 и используя режимы. Если вы также можете привести пример, это будет очень полезно. –