Как переместить динамический результат-документ в отдельный включенный или импортированный xsl-файл - PullRequest
1 голос
/ 31 октября 2011

У меня есть куча файлов xsl. Я хочу централизованно контролировать отступ документа результата. Я использую код ниже в каждом файле xsl. У меня есть шаблон xsl: template name = "data" в каждом файле, но содержимое этого шаблона отличается. Можно ли правильно переместить содержимое xsl: template match = "/" в отдельный xsl-файл и импортировать его в каждый xsl-файл. Я пытался, но безрезультатно. Может кто-нибудь посоветовать мне рабочий код?

<?xml version="1.0"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                          xmlns="http://www.w3.org/1999/xhtml">
<xsl:output name="indent" method="html" indent="yes" omit-xml-declaration="yes"/>
<xsl:output name="no_indent" method="html" indent="no" omit-xml-declaration="yes"/>

   <xsl:template match="/">
    <xsl:variable name="indent" select="//page/view-data/html-indent"/>
    <xsl:if test="$indent='yes'">
     <xsl:result-document format="indent" >
       <xsl:call-template name="data"/>
     </xsl:result-document>
    </xsl:if>
    <xsl:if test="$indent='no'">
     <xsl:result-document format="no_indent" >
       <xsl:call-template name="data"/>
     </xsl:result-document>
    </xsl:if>
   </xsl:template>

   <xsl:template name="data">
   <!-- The content is different from file to file -->
   </xsl:template>
</xsl:stylesheet>

Ответы [ 3 ]

0 голосов
/ 01 ноября 2011

Хорошо, после разделения это main.xsl.Я просто упростил здесь значение переменной.

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                          xmlns="http://www.w3.org/1999/xhtml">
<xsl:output name="indent" method="html" indent="yes" omit-xml-declaration="yes"/>
<xsl:output name="no_indent" method="html" indent="no" omit-xml-declaration="yes"/>

<xsl:template match="/">
   <xsl:variable name="indent" select="'yes'"/>
   <xsl:if test="$indent='yes'">
     <xsl:result-document format="indent" >
       <xsl:call-template name="data"/>
     </xsl:result-document>
   </xsl:if>
   <xsl:if test="$indent='no'">
     <xsl:result-document format="no_indent" >
       <xsl:call-template name="data"/>
     </xsl:result-document>
   </xsl:if>
</xsl:template>

</xsl:stylesheet>

И следующий файл, скажем, 1.xsl

  <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.w3.org/1999/xhtml">
      <xsl:import href="main.xsl"/>

      <xsl:template name="data">
      ...
      </xsl:template>
  </xsl:stylesheet>

Здесь у меня ошибка преобразования xsl

0 голосов
/ 05 ноября 2011

Вы, кажется, упустили из виду тот факт, что есть гораздо более простой способ сделать это.

<xsl:param name="indent" select="'no'"/>
<xsl:output method="html"/>

<xsl:template match="/">
  <xsl:result-document indent="{$indent}">
    ....
  </xsl:result-document>
</xsl:template>

и затем укажите значение отступа в качестве параметра таблицы стилей.И на самом деле есть еще более простой способ: вы можете переопределить свойства сериализации, заданные в таблице стилей, свойствами, предоставленными из командной строки или API Java: из командной строки просто укажите! Indent = yes или! Indent = no.

0 голосов
/ 01 ноября 2011

Да, это:

Переместите повторяющийся код в новый .xsl, например. main.xsl:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output name="indent" method="html" indent="yes" omit-xml-declaration="yes"/>
<xsl:output name="no_indent" method="html" indent="no" omit-xml-declaration="yes"/>

<xsl:template match="/">
 <xsl:variable name="indent" select="//page/view-data/html-indent"/>
 <xsl:if test="$indent='yes'">
  <xsl:result-document format="indent" >
    <xsl:call-template name="data"/>
  </xsl:result-document>
 </xsl:if>
 <xsl:if test="$indent='no'">
  <xsl:result-document format="no_indent" >
    <xsl:call-template name="data"/>
  </xsl:result-document>
 </xsl:if>
</xsl:template>

<xsl:template name="data"/>

</xsl:stylesheet>

Затем в других ваших файлах .xsl просто используйте xsl: import в верхней части документа:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:import href="file:///C:/Users/Stefanos/area51/main.xsl"/>
  <!--Other stuff here-->
  <xsl:template match="extra"/>

</xsl:stylesheet>

И добавьте больше кода. Надеюсь, это помогло:)

...