0
是否有可能編寫一個模板規則,其中匹配屬性使用前置兄弟運算符,排除某些類型的節點? 我試圖解釋我的自我。我有這樣的XML輸入文檔:XSLT:如何計算前面的兄弟,排除某些節點類型?
<?xml version="1.0"?>
<graph>
<vertex name="A"/>
<edge name="AB" />
<tag name="tagA"/>
<vertex name="C"/>
<edge name="AB"/>
<vertex name="AA"/>
<edge name="AAD"/>
<vertex name="D"/>
<vertex name="AAA"/>
<tag name="tagE"/>
<vertex name="E"/>
</graph>
我想提取是vertex
其前同輩排除型標籤的所有節點,是vertex
含A
焦炭name
。在這種情況下,我想要的輸出是: <vertex name="E"/>
我不知道哪個template
規則我應該寫,因爲我知道如何設置的約束給定類型的第一前置兄弟:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:exsl="http://exslt.org/common"
exclude-result-prefixes="exsl">
<xsl:template match="vertex[preceding-sibling::vertex[1]
[self::vertex[contains(@name, 'A')]]]">
<xsl:copy><xsl:apply-templates select="@*|node()"/></xsl:copy>
我能寫一個匹配節點的第一個preceding-sibling
,沒有指定任何類型,但它不能幫助我在這種情況下。 這裏的問題是我想告訴XSLT考慮所有前面的兄弟,但不是tag
。
我很抱歉,但這不是我正在尋找的,因爲我想要的是前一個兄弟姐妹,除非這是一個「標籤」。我編輯我的例子更清楚。即使其最前面的兄弟是「標籤」,我仍然希望接收到作爲輸出的<頂點名稱=「E」/>「。這是因爲我想對最前面的兄弟不是「標籤」設置約束。 – delca85
我已經對我的答案進行了編輯,將「標記」記錄考慮在內。 –