2011-09-07 11 views

Odpowiedz

7

Można użyć not(ancestor::*).

przykład użycia:

<xsl:template match="node()|@*"> 
    <xsl:if test="not(ancestor::*)"> 
     <xsl:message>The root element is "<xsl:value-of select="name()"/>".</xsl:message> 
    </xsl:if> 
    <xsl:copy> 
     <xsl:apply-templates select="node()|@*"/> 
    </xsl:copy> 
    </xsl:template> 
+5

Dwie kwalifikacje: (a) jest to w porządku dla XSLT 1.0, gdzie węzeł główny jest zawsze węzłem dokumentu; nie jest w porządku dla wersji 2.0, gdzie węzeł główny może być węzłem elementu (lub w rzeczywistości atrybutem lub węzłem tekstowym). (b) Podany kod jest OK, z wyjątkiem wiadomości. Komentarz lub instrukcja przetwarzania, która jest dzieckiem węzła głównego (dokumentu), spełni test, ale wygeneruje fałszywy komunikat. –

+0

Ładne xpath do identyfikacji elementu głównego, +1 –

7

W Xpath 1.0 (XSLT 1.0):

not(parent::*) 

albo można użyć:

generate-id(..) = generate-id(/) 

W Xpath 2,0 (XSLT 2,0):

.. is root() 
Powiązane problemy