2013-10-09 3 views
1

У меня есть структуру XML, аналогичную:Как выбрать ребенка предка через XPath?

<a> 
    <b> 
     <c id="2.3"> 
     </c> 
    </b> 
    <d> 
     <e> 
     <f> 
     </f> 
     </e> 
    </d> 
</a> 

Я внутри шаблона для "f", где я хочу поставить when с тестом на первое число id из c, например:

<xsl:template match="f"> 
    <xsl:choose> 
     <xsl:when test="substring-before(../../../c/@id, '.') = '2'"> 
     <xsl:text>Successful</xsl:text> 
     </xsl:when> 
    </xsl:choose> 
</xsl:template> 

Приведенный выше код не работает!

Может ли кто-нибудь предложить мне способ заставить его работать?

Thnx заранее!

ответ

4

Потому что существует b между предком и c.

Это должно работать:

substring-before(../../../b/c/@id, '.') = '2' 

(если предположить, что второй <b> должен был быть </b>)

4

Относительные пути хороши, но иногда это полезно, чтобы быть более явным.

<xsl:template match="f"> 
    <xsl:choose> 
     <xsl:when test="substring-before(ancestor::a[1]/b/c/@id, '.') = '2'"> 
     <xsl:text>Successful</xsl:text> 
     </xsl:when> 
    </xsl:choose> 
</xsl:template> 
Смежные вопросы