用XML编写大学课程

时间:2012-11-26 16:32:48

标签: xml xslt

我在这里搜索了互联网/帖子,试图找到我问题的答案。我正在学习XML并且有一项任务我必须将以前的.xml转换为.xslt。我已经得到了所有这些,但是一小部分代码无法找到我输入的值。 例如;我知道可能有很多其他方法可以实现这一点,但这是我给出的代码。

.xml的一部分如下:

     <collection>
     <movie>
     <title>Braveheart</title>
     <genre v_genre="Action"/>
     <rating v_rating="R"/>
     <grading v_grading="4"/>
        <summary>William Wallace, a commoner, unites the 13th Century Scots in their battle to overthrow Englands rule </summary>
    <year>1995</year>
    <director>Mel Gibson</director>
    <runtime>177</runtime>
    <studio>Icon Entertainment International</studio>
    <actors>
        <actor ID="001">Mel Gibson</actor>
        <actor ID="002">Sophie Marceau</actor>
        <actor ID="003">Patrick McGoohan</actor>
    </actors>
</movie>

现在为此,我不明白这个价值。        如果有人可以帮助我理解那部分我会非常感激。问题的第2部分将是.xslt doc正确填充,除了以下部分:流派,评级和评分。我尝试了多种不同的方法来尝试获取填充值。这是代码的一部分。

<xslt:for-each select="collection/movie">

 <tr>

 <td>

 <xslt:value-of select="title"/>

 </td>

 <td>

  <xslt:value-of select="genre"/>

 </td>

 <td>

<xslt:value-of select="rating/v_rating"/>

</td>

<td>

 <xslt:value-of select="grading/v_grading"/>

 </td>
 <td>
 <xslt:value-of select="summary"/>
 </td>               
 <td>
  <xslt:value-of select="year"/>
  </td>
   <td>
  <xslt:value-of select="director"/>
  </td>
  <td>
  <xslt:value-of select="runtime"/>
   </td>
   <td>
    <xslt:value-of select="studio"/>
   </td>
   <td>
  <xslt:value-of select="actors"/>
  </td>
  </tr>

 </xslt:for-each>

  </table>

 </body>

  </html>

  </xslt:template>
  </xslt:stylesheet>

我试图真正理解为什么这种方式是为了将来的用途。整个大学的事情。希望这不会被删除。我已经搜索了很多地方来解决这个问题,但没有例子以这种方式列出来。先谢谢你。

1 个答案:

答案 0 :(得分:2)

您遇到问题的元素是这些

 <genre v_genre="Action"/>
 <rating v_rating="R"/>
 <grading v_grading="4"/>

因此,如果您注意到,您想要的值保存在属性中,而不是子文本节点中。因此,您需要将 xsl:value-of 更改为此(在流派

的示例中)
<xsl:value-of select="genre/@v_genre"/>

如果您热衷于学习XSLT,可能值得知道, xsl:apply-templates 优先于 xsl:for-each 。此外,您应该在代码中删除repitition。查看示例,表单元格的输出顺序与XML中的子元素的顺序相同。因此,您可以创建一个通用模板来匹配大多数子元素以输出表格单元格。

试试这个XSLT

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
   <xsl:output method="xml" indent="yes"/>
   <xsl:template match="/collection">
      <table>
         <xsl:apply-templates select="movie"/>
      </table>
   </xsl:template>

   <xsl:template match="movie">
      <tr>
         <xsl:apply-templates/>
      </tr>
   </xsl:template>

   <xsl:template match="genre">
      <td>
         <xsl:value-of select="@v_genre"/>
      </td>
   </xsl:template>

   <xsl:template match="rating">
      <td>
         <xsl:value-of select="@v_rating"/>
      </td>
   </xsl:template>

   <xsl:template match="grading">
      <td>
         <xsl:value-of select="@v_grading"/>
      </td>
   </xsl:template>

   <xsl:template match="*">
      <td>
         <xsl:value-of select="."/>
      </td>
   </xsl:template>
</xsl:stylesheet>

请注意,XSLT处理器将匹配更具体的命名元素(例如流派),然后在最后匹配*的通用模板。