я хочу назвать свой выходной XML-файл на основе значения тега, используя XMLT [1.0]?

#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.