#xml #xslt-1.0
#xml #xslt-1.0
Вопрос:
мой входной код называется «input.xml «.
это мой код xsl:
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:bar="http://www.bar.org">
<xsl:output method="xml"/>
<xsl:template match="/">
<html>
<body>
<h2> product </h2>
<table border = "1">
<tr bgcolor = "pink">
<th>ID</th>
<th>tag</th>
<th>destination</th>
</tr>
<xsl:for-each select = "root/product">
<xsl:if match=".[tag = 'good']">
<tr>
<td><xsl:value-of select="@ID"/></td>
<td><xsl:value-of select="tag"/></td>
<td><xsl:value-of select="destination"/></td>
</tr>
</xsl:if>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
я хочу, чтобы выходной файл был назван good_input.xml на основе значения.
Комментарии:
1. Вы не можете присвоить имя выходному файлу из процессора XSLT 1.0.
2. Другими словами, вам нужно определить имя в коде, который вызывает процессор XSLT.
3. На самом деле, это возможно, если ваш процессор поддерживает
exsl:document
элемент расширения или XSLT 1.1. Я говорю «вроде», потому что это позволяет создавать дополнительный документ результата в дополнение к основному.4. @michael.hor257k не могли бы вы рассказать мне больше?
5. Вы можете прочитать об этом здесь: exslt.org/exsl/elements/document/index.html и вот: w3.org/TR/xslt11/#multiple-output . Какой процессор XSLT вы используете?
Ответ №1:
Если JRE использует Xalan Java 2.7 в качестве процессора XSLT 1.0 для Transformer
, то вы должны иметь возможность использовать собственный элемент расширения Xalan redirect:write
, как показано в https://github.com/apache/xalan-j/blob/xalan-j_2_7_1/samples/extensions/1-redir.xsl:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0"
xmlns:redirect="http://xml.apache.org/xalan/redirect"
extension-element-prefixes="redirect">
<xsl:template match="/">
<redirect:write select="concat(root/product/tag, 'result.html')">
<html>
...
</html>
</redirect:write>
</xsl:template>
С другой стороны, поскольку вы используете Java, вы также можете переключиться на XSLT 2 или 3 и стандартизированный xsl:result-document
, поместив Saxon 10 или 9 HE (доступно в Sourceforge и Maven) в classpath.