全局变量为各种元素中的每一种指示需要处理哪些属性。
<xsl:variable name="attributes.rtf">
<element name="measure">
<att>type</att>
<att>quantity</att>
<att>unit</att>
</element>
<element name="milestone">
<att>n</att>
</element>
<element name="lb">
<att>ed</att>
<att>type</att>
<att>subtype</att>
<att>n</att>
</element>
</xsl:variable>
<xsl:variable name="attributes" select="exslt:node-set($attributes.rtf)" /> <!-- This is XSLT 1.0 -->
当上下文是一个元素时,我需要一个 for-each 循环遍历该元素的属性。我看不到如何在一个 XPath 表达式中做到这一点。现在我有这两个:
<xsl:variable name="temp" select="." /> <!-- For, say, a <measure> element, -->
<xsl:for-each select="$attributes/element[@name=name($temp)]/att"> <!-- loop through the names "type", "quantity", and "unit" -->
<xsl:for-each select="$temp/@*[name()=current()]"> <!-- If an attribute of that name exists in the current <measure> element -->
<!-- (now stored as $temp), then process that attribute. -->
</xsl:for-each>
</xsl:for-each>
有没有办法在一个表达式中做到这一点,而无需创建 $temp.
而且,我需要一个外部测试条件来指示上下文元素是否具有任何列出的属性。对于那个测试,我想要一个表达式。
(属性的处理确实需要排序,所以可能需要两个循环。但是顺序与测试条件无关。所以也许这可以用一个表达式来完成。)