3
我有這樣的XSLT 2.0模板:XSLT多個條件
<xsl:template match="para[
not(ancestor::p)
and not(ancestor::div)
and not(ancestor::paragraph)
]">
<p class="para">
<xsl:apply-templates/>
</p>
</xsl:template>
它做什麼,我需要做的:它阻止一個HTML <p>
在<p>
。但它是冗長的,我想有一個更簡潔的方式來寫它。
有沒有更好的方式來寫多祖先測試?我嘗試了一個聯盟..當然這並不奏效。
1。在第二種情況下,這將有助於解釋,第二個模板由於其匹配模式的特殊性更高的優先級含蓄。然而,這引入了隱藏的依賴關係,以後可能很容易被打破,例如如果某人由於某種原因需要更改'match =「para」'模式。我在使用模板優先級時的建議是使用'priority ='屬性使它們顯式化。 – LarsH
@LarsH我已經得到了一個有點疲憊解釋比賽表達特異性的,但是,是的,你說得對。還有第二點,這是任何黑名單/白名單固有的問題。達到一定的轉換複雜度時,它仍然可以管理,在某些時候它可能會導致意外的行爲。 – Tomalak
我同意你的意見。除了複雜性,也取決於人們對項目的數量,他們在XSLT的經驗水平等。我不會告訴專家做一個個人項目,他應該避免使用隱式的優先級。但我認爲引入依賴於它,別人誰可能不知道的解決方案時,重要的是,他們知道這個問題的存在。然後他們可以做出明智的決定。是什麼讓這種情況下,值得格外注意的是,如果發生錯誤,這是非常難以發現爲什麼,如果你不知道的默認優先級機制。 – LarsH