查找子项的子项,其属性代码等于在url - XSL上传递的参数

时间:2012-10-13 22:18:43

标签: xslt-2.0

在这个充满活力的网站上, 网址看起来像这样:departments / CHEM.html

CHEM是一个参数。

     <xsl:param name="dep" select="'CHEM'" />

xml的一部分在

之下
<course acad_year="2012" cat_num="5085" offered="Y">
  <term term_pattern_code="1" fall_term="Y" spring_term="N">fall term</term>
  <department code="CHEM">
     <dept_long_name>Department of Chemistry and Chemical Biology</dept_long_name>
     <dept_short_name>Chemistry and Chemical Biology</dept_short_name>
  </department>
</course> ....

我正在尝试将dept_short_name用于我的H1标签,但我还没有成功。到目前为止我试过了

<h2><xsl:value-of select="course/department/[code={@$dep}]"/></h2>

任何建议???谢谢!

2 个答案:

答案 0 :(得分:1)

我会试试这个:

<xsl:value-of select="course/department[@code=$dep]/dept_short_name/text()"/>

这就是说:找到其代码属性为参数“dep”的值的department元素(在course元素中),然后找到dept_short_name子元素,然后获取该元素内的文本。

您必须使用@来说“代码”是一个属性,但“dep”不应该拥有它。我认为{}符号用于样式表的非XSLT元素的属性内部,因此我不会在value-of表达式中使用它。

答案 1 :(得分:1)

只需使用

<xsl:value-of select="course/department[@code eq $dep]/dept_short_name"/>

<强>记住

在XPath 2.0(XSLT 2.0)中使用eq运算符进行值比较 - 它比一般的比较运算符=更有效,它至少只需要使用一个它的操作数是一个序列。