2014-12-19 187 views
0

我想要一個模板匹配這樣的:軸在XSLT模板匹配

<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

由於語法無效,我們應該如何知道你想要它做什麼?我們不能期望通過閱讀不符合他們的程序來滿足您的要求。 – 2014-12-19 17:17:21

回答

2

這裏有一種方法:

//content[parent::*/@type='async'] 

可以簡化爲:

//content[../@type='async'] 

下面是另一個:

//*[@type='async']/content 

注意
一般情況下,它總是最好明確和避免如果知道元素的名稱(在這種情況下爲document),並且特別是//符號(如果知道確切路徑),則可以使用*表示法。

具體而言,在匹配模式中,前導//是多餘的,因爲如果(且僅當)模式在遍歷輸入樹的過程中匹配,則將自動應用模板。

+2

在一個模式中,任何前導'//'也可以被刪除。 – 2014-12-19 09:48:51

+0

@MartinHonnen謝謝,我一直關注XPath的一般方面,忽略了這個問題的具體背景。 – 2014-12-19 11:23:17

+0

你也可以寫'match ='* [@ type ='async']/content「' – 2014-12-19 17:19:03