发新话题
打印

XSLT语法详解:<xsl:apply-imports>

XSLT语法详解:<xsl:apply-imports>

&lt;xsl:apply-imports&gt; 允许你对指定的结点使用重写的模板,相当于Java中的super()方法。
必须的属性:无
可选的属性:无
&lt;xsl:apply-imports&gt;是一个空元素。

下面是针对&lt;xsl:apply-imports&gt;用法的实例。

XML文件:
复制内容到剪贴板
代码:
&lt;?xml version="1.0"?&gt;
&lt;test&gt;

  &lt;p&gt;This is a test XML document used by several
  of our sample stylesheets.&lt;/p&gt;
  &lt;question&gt;
    &lt;text&gt;When completed, the Eiffel Tower was the
    tallest building in the world.&lt;/text&gt;
    &lt;true correct="yes"&gt;You're correct!  The Eiffel
    Tower was the world's tallest building until 1930.&lt;/true&gt;
    &lt;false&gt;No, the Eiffel Tower was the world's tallest
    building for over 30 years.&lt;/false&gt;
  &lt;/question&gt;
  &lt;question&gt;
    &lt;text&gt;New York's Empire State Building knocked the
    Eiffel Tower from its pedestal.&lt;/text&gt;
    &lt;true&gt;No, that's not correct.&lt;/true&gt;
    &lt;false correct="yes"&gt;Correct!  New York's Chrysler
    Building, completed in 1930, became the world's tallest.&lt;/false&gt;
  &lt;/question&gt;
&lt;/test&gt;
我们要导入的XSLT样式表(imported.xsl):
复制内容到剪贴板
代码:
&lt;?xml version="1.0"?&gt;
&lt;xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"&gt;

  &lt;xsl:output method="html"/&gt;

  &lt;xsl:template match="/"&gt;
    &lt;html&gt;
      &lt;body&gt;
        &lt;xsl:for-each select="//text|//true|//false"&gt;
          &lt;p&gt;
            &lt;xsl:apply-templates select="."/&gt;
          &lt;/p&gt;
        &lt;/xsl:for-each&gt;
      &lt;/body&gt;
    &lt;/html&gt;
  &lt;/xsl:template&gt;

  &lt;xsl:template match="text"&gt;
    &lt;xsl:text&gt;True or False: &lt;/xsl:text&gt;&lt;xsl:value-of select="."/&gt;
  &lt;/xsl:template&gt;

  &lt;xsl:template match="true|false"&gt;
    &lt;b&gt;&lt;xsl:value-of select="name()"/&gt;:&lt;/b&gt;
    &lt;br/&gt;
    &lt;xsl:value-of select="."/&gt;
  &lt;/xsl:template&gt;

&lt;/xsl:stylesheet&gt;
该XSLT样式表简单地格式化了XML中的&lt;true&gt; 和 &lt;false&gt;元素。如图


下面是新的XSLT样式表,其中利用&lt;xsl:apply-imports&gt;在XSLT中导入其他的样式表
复制内容到剪贴板
代码:
&lt;?xml version="1.0"?&gt;
&lt;xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"&gt;

  &lt;xsl:import href="imported.xsl"/&gt;
  &lt;xsl:output method="html"/&gt;

  &lt;xsl:template match="/"&gt;
    &lt;html&gt;
      &lt;head&gt;
        &lt;title&gt;A Brief Test&lt;/title&gt;
        &lt;style&gt;
          &lt;xsl:comment&gt;
            p.question {font-size: 125%; font-weight: bold}
            p.right    {color: green}
            p.wrong    {color: red}
          &lt;/xsl:comment&gt;
        &lt;/style&gt;
      &lt;/head&gt;
      &lt;body&gt;
        &lt;h1&gt;A Brief Test&lt;/h1&gt;
        &lt;xsl:for-each select="//question"&gt;
          &lt;table border="1"&gt;
            &lt;xsl:apply-templates select="text"/&gt;
            &lt;xsl:apply-templates select="true|false"/&gt;
          &lt;/table&gt;
          &lt;br/&gt;
        &lt;/xsl:for-each&gt;
      &lt;/body&gt;
    &lt;/html&gt;
  &lt;/xsl:template&gt;

  &lt;xsl:template match="text"&gt;
    &lt;tr bgcolor="lightslategray"&gt;
      &lt;td&gt;
        &lt;p class="question"&gt;
          &lt;xsl:apply-imports/&gt;
        &lt;/p&gt;
      &lt;/td&gt;
    &lt;/tr&gt;
  &lt;/xsl:template&gt;

  &lt;xsl:template match="true|false"&gt;
    &lt;tr&gt;
      &lt;td&gt;
        &lt;xsl:choose&gt;
          &lt;xsl:when test="@correct='yes'"&gt;
            &lt;p class="right"&gt;
              &lt;xsl:apply-imports/&gt;
            &lt;/p&gt;
          &lt;/xsl:when&gt;
          &lt;xsl:otherwise&gt;
            &lt;p class="wrong"&gt;
              &lt;xsl:apply-imports/&gt;
            &lt;/p&gt;
          &lt;/xsl:otherwise&gt;
        &lt;/xsl:choose&gt;
      &lt;/td&gt;
    &lt;/tr&gt;
  &lt;/xsl:template&gt;

&lt;/xsl:stylesheet&gt;
使用&lt;xsl:apply-imports&gt;可以丰富被导入样式表的内容。下面是采用新样式表的输出结果:
复制内容到剪贴板
代码:
&lt;html&gt;
&lt;head&gt;
&lt;META http-equiv="Content-Type" content="text/html; charset=UTF-8"&gt;
&lt;title&gt;A Brief Test&lt;/title&gt;
&lt;style&gt;
&lt;!--
            p.question {font-size: 125%; font-weight: bold}
            p.right    {color: green}
            p.wrong    {color: red}
          --&gt;
&lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;h1&gt;A Brief Test&lt;/h1&gt;
&lt;table border="1"&gt;
&lt;tr bgcolor="lightslategray"&gt;
&lt;td&gt;
&lt;p class="question"&gt;True or False: When completed, the Eiffel
Tower was the tallest building in the world.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;p class="right"&gt;
&lt;b&gt;true:&lt;/b&gt;
&lt;br&gt;You're correct!  The Eiffel Tower was the world's tallest
building until 1930.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;p class="wrong"&gt;
&lt;b&gt;false:&lt;/b&gt;
&lt;br&gt;No, the Eiffel Tower was the world's tallest building for
over 30 years.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;br&gt;
&lt;table border="1"&gt;
&lt;tr bgcolor="lightslategray"&gt;
&lt;td&gt;
&lt;p class="question"&gt;True or False: New York's Empire State Building
knocked the Eiffel Tower from its pedestal.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;p class="wrong"&gt;
&lt;b&gt;true:&lt;/b&gt;
&lt;br&gt;No, that's not correct.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;
&lt;p class="right"&gt;
&lt;b&gt;false:&lt;/b&gt;
&lt;br&gt;Correct!  New York's Chrysler Building, completed in 1930,
became the world's tallest.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;br&gt;
&lt;/body&gt;
&lt;/html&gt;
具体的页面表现为:


原文地址: http://www.xslt.org.cn/html/grammars/20071027/XSLT_yufaxiangjie_xsl_apply_imports_49.html

TOP

发新话题
最近访问的版块