我想要一个像这样的模板匹配:
<xsl:template match="//content[parent::(@type='async')]">
<table>
<thead>
<xsl:apply-templates select="row[@type='header']" />
</thead>
<tbody>
<xsl:apply-templates select="/row[@type='data']" />
</tbody>
</table>
</xsl:template>
使用此XML:
<document type="async">
<content>
<!-- Some rows with types -->
</content>
</document>
我的问题是<xsl:template match="//content[parent::(@type='async')]">
,我该如何使用?
答案 0 :(得分:2)
以这种方式:
//content[parent::*/@type='async']
可以缩短为:
//content[../@type='async']
这是另一个:
//*[@type='async']/content
注意强>:
一般来说,如果您知道元素的名称(在这种情况下为*
),尤其是{{1},则最好明确并避免使用document
表示法。 }符号,如果你知道确切的路径。
具体来说,在匹配模式中,前导//
是多余的,因为如果(并且仅当)模式在遍历输入树的过程中匹配时,将自动应用模板。