xsl模板匹配具有特定值的节点

时间:2012-11-23 23:04:59

标签: xslt xslt-2.0

我试图通过参数中的内容过滤XML。 什么是正确的sintax匹配只有那些dep_code等于'某事'或在这种情况下$ department ???

的课程

XML结构

     <course>
         <dep_code></dep_code>
         <catalog_number></catalog_number>
         <course_group></course_group>
         <term></term>
         <offered></offered>
         <course_type></course_type>
         <course_level></course_level>
         <title></title>
         <course_number></course_number>
         <meeting_text></meeting_text>
         <faculty_text></faculty_text>
         <description></description>
         <prerequisites></prerequisites>

      </course>

参数定义

<xsl:param name="department" select="'All'" />

我尝试过的代码 我试过这个:

<xsl:template match="course/dep_code/{$department}">

还有:

<xsl:template match="course/dep_code/$department">


<xsl:template match="course/dep_code eq $department">

我继续收到如下语法错误:

  1. F [Saxon-PE 9.4.0.3]路径表达式中的意外标记“{”
  2. F [Saxon-PE 9.4.0.3] XSLT中不允许使用变量引用 模式(谓词除外)
  3. 提前致谢

1 个答案:

答案 0 :(得分:6)

示例XML

<?xml version="1.0" encoding="ISO-8859-1"?>
<courses>
      <course>
         <dep_code>not_it</dep_code>
         <catalog_number></catalog_number>
         <prerequisites></prerequisites>
      </course>
      <course>
         <dep_code>something</dep_code>
         <catalog_number></catalog_number>
         <prerequisites></prerequisites>
      </course>
</courses>

示例XSLT

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="/">
  <html>
  <body>
    <table border="1">
      <tr>
        <th>dep_code</th>
      </tr>
      <xsl:for-each select="courses/course">
        <xsl:if test="dep_code[text()='something']">
      <tr>
        <td><xsl:value-of select="dep_code"/></td>
      </tr>
        </xsl:if>
      </xsl:for-each>
    </table>
  </body>
  </html>
</xsl:template>
</xsl:stylesheet>

结果

<html>
<body>
<table border="1">
<tr><th>dep_code</th></tr>
<tr><td>something</td></tr>
</table>
</body>
</html>