4 Stimmen

XSLT 1.0: wie man die "übergeordnete" Achse ansteuert

Ich habe eine Frage bezüglich der Leistung eines XSLT, das die "übergeordnete" Achse in einem XPATH aufruft. Ich kann die übergeordnete Achse mit "::*" aufrufen oder ich rufe sie mit "::" und dem Namen des Elements

parent::*/MVKE/item/VMSTA='Z2'

o

parent::item/MVKE/item/VMSTA='Z2'

Spielt es für die Leistung eine Rolle, ob ich das "*" oder den Namen des Knotenelements verwende? Beide funktionieren, aber ich frage mich, was der Unterschied ist.

6voto

Wayne Punkte 58002

Der erste Ausdruck entspricht jede übergeordnetes Element. Der zweite Ausdruck passt nur, wenn das übergeordnete Element ein item Element. Das ist der einzige Unterschied. Ich kann mir keine signifikanten Auswirkungen auf die Leistung vorstellen, da beide Knotentests in konstanter Zeit durchgeführt werden können.

Beachten Sie diese Zeile aus der XPath 1.0 Spezifikation :

Jeder Knoten mit Ausnahme des Wurzelknotens hat genau einen übergeordneten Knoten, nämlich entweder ein Elementknoten oder der Wurzelknoten.

In der Praxis bedeutet dies, dass parent::* passt zu jede außer dem des Root-Elements.

Zur Veranschaulichung ein einfaches Beispiel-Dokument:

<root>
    <one/>
    <item>
        <two/>
    </item>
</root>

Dann:

  • //parent::* erhalten Sie die root y item Elemente (jeder übergeordnete Knoten, der ein Element ist)

  • //parent::item gibt nur die item Element (das einzige übergeordnete Element, das ein item )

  • //parent::node() erhalten Sie das Elternteil von root (d. h. der Wurzelknoten) sowie die root y item Elemente

1voto

Lucero Punkte 57715

Es ist nicht dasselbe, aber ich bezweifle, dass es einen signifikanten Leistungsunterschied geben wird.

Die Verwendung des * ein beliebiges übergeordnetes Element akzeptiert, ist es bei Verwendung des Namens erforderlich, dass das übergeordnete Element diesen Namen hat, sonst erhält man eine leere Knotenmenge. Wenn man also schneller wäre, wäre es wahrscheinlich die * ein.

Eine andere Möglichkeit wäre die Verwendung von parent::node() oder seine Kurzform ..

0voto

zak Punkte 668

Wie wäre es mit einfach:

<xsl:value-of select="../node()"/>

Gibt Ihnen den unmittelbaren Elternteil. Gibt es, wie die ursprüngliche Frage lautete, Leistungsvorteile bei der einen Methode gegenüber der anderen?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X