2013-09-09 2 views
0

У меня есть следующие данные:Получить родительского атрибута в текущей позиции с помощью XSLT

<books> 
    <entry id="8"> 
     <author name="tony-blair">Tony Blair</author> 
    </entry> 
    <entry id="9"> 
     <author name="william-campbell">William Campbell</author> 
    </entry> 
</books> 

и использовать следующий шаблон

<xsl:template match="books/entry"> 
    <xsl:value-of select="author"/> 
    <xsl:value-of select="ancestor::books/entry/@id"/> 
</xsl:template> 

Я пытаюсь использовать ancestor::books/entry/@id, но это приводит только первый идентификатор.
Как получить идентификатор родительской записи, пока мы находимся в текущей позиции?

+0

Элементы 'entry' являются братьями и сестрами, они не имеют отношения родительский/дочерний, поэтому неясно, чего вы хотите достичь, когда говорите« Как получить идентификатор родительской записи ». –

ответ

1
<xsl:template match="books/entry"> 
    <xsl:value-of select="author"/> 
    <xsl:value-of select="@id"/> 
</xsl:template> 
0

В пределах

<xsl:template match="books/entry"> 

текущий узел контекста является entry элемент, так что вы можете просто использовать

<xsl:value-of select="@id" /> 

Вам не нужно идти до books элемента и снова опуститесь.

0
<xsl:template match="entry"> 
    <xsl:value-of select="author"/> 
    <xsl:value-of select="@id"/> 
</xsl:template> 

Как говорили другие, вам не нужно подниматься и опускаться по дереву. книги/запись - это крошечная оптимизация производительности, но, похоже, вы еще не там, так что держите вещи простыми, и вы, вероятно, не обрабатываете огромные документы.