【问题标题】:use a xml output from a xsl file使用 xsl 文件的 xml 输出
【发布时间】:2012-05-10 12:34:41
【问题描述】:

我得到了一个任务,其中一个问题要求我们基于新模式通过 XSLT 生成新的 XML 输出。我已经做到了。这个问题的好处是,生成一个新的 xsl 文件来构建一个 HTML 表,以根据前一个 xsl 文件输出的标准对结果进行排名。

例如,在原始 XML 中:

<PROPERTY>
<NAME>Abvc</NAME>
</PROPERTY>

在第一个 xsl 文件中,我已将其更改为 xml 输出并重命名标签:

<xsl:output method="xml" indent="yes"/>
<xsl:template match="/">
  <xsl:element name="pro">
    <xsl:apply-templates select="PROPERTY"/>
  </xsl:element>
</xsl:template>

<xsl:template match="PROPERTY">
  <xsl:attribute name="name">
    <xsl:value-of select="NAME"/>
  </xsl:attribute>
</xsl:template>

所以我的问题是我是否喜欢在 another xsl 中使用 above xsl 文件的输出,例如:

<xsl:template match="pro">
  //do something here...
</xsl:template>

有可能吗?顺便说一句,我必须使用默认的 xslt 1.0 版本。这是要求。

【问题讨论】:

    标签: xml xslt


    【解决方案1】:

    是的,总是可以使用另一个样式表来处理一个样式表的输出。在大型应用程序中,它是创建模块化结构和可重用组件的重要方式,通常称为“流水线”。

    如何构建管道的机制取决于您使用的技术。您可以使用 Java 程序、使用 XProc、使用 Ant 或使用 shell 脚本来控制它。你甚至可以用手来做。有许多应用程序框架(例如 Orbeon)提供流水线支持。

    【讨论】:

      【解决方案2】:

      我这里有一个简单的 HTML 输出:

      <?xml version="1.0" encoding="UTF-8"?>
      <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
      
      <xsl:output method="html" doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
          doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN" indent="yes"/>
      
      <xsl:template match="/">
          <xsl:apply-templates select="pro"/>
      </xsl:template>
      
      <xsl:template match="pro">
          <html>
              <body>
                  <table border="1">
                      <th>
                          <xsl:value-of select="'Header'"/>
                      </th>
                      <tr>
                          <td><xsl:value-of select="./@name"/></td>
                      </tr>
                  </table>    
              </body>
          </html>
      </xsl:template>
      
      </xsl:stylesheet>
      

      【讨论】:

      • 感谢您的回复。但是你怎么知道这个结果是从另一个 xsl 文件的输出中检索到的呢?问候扎克
      • 你好 Zack,很抱歉我迟到的回答。是的,你可以这么做。这取决于您正在使用的框架。您可以定义多个要调用的样式表吗?这样,第一个定义的样式表的输出将被传递给第二个。希望对您有所帮助,彼得
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多