Passende untergeordnete Elemente in XSL

8

Ich dachte, ich hätte einen Fehler in einer Antwort auf diese Frage und wies darauf hin. Mir wurde gesagt, ich sei falsch, und meine Antwort wurde später gelöscht.

Ich sehe immer noch nicht, wie ich falsch lag. Deshalb poste ich hier und hoffe, dass jemand mir mein Missverständnis erklären kann.

Die Antwort, auf die ich geantwortet habe, hat die Verwendung von Anwendungsvorlagen erläutert. Es enthielt die folgenden XML- und XSL-Anweisungen und beschreibt, wie die Vorlagen abgeglichen werden:

%Vor%

Mein Kommentar war, dass die letzte Vorlage darin sein sollte:

%Vor%

weil der aktuelle Knoten bereits <xml>

ist

Mir wurde gesagt:

  

Nein, xml / * ist ein Muster, das mit untergeordneten Elementen eines Elements übereinstimmt   der Name xml.

Testen der ursprünglichen Antwort

Allerdings mit diesem XML:

%Vor%

Und dieses XSL-Stylesheet (das obige Snippet ausfüllen):

%Vor%

Ich bekomme:

%Vor%

Meine korrigierte Version testen

Wenn ich die letzte Vorlage durch ersetzen:

%Vor%

nach meiner Antwort bekomme ich:

%Vor%

das scheint korrekt zu sein.

Ich hoffe, dass meine Frage keine Richtlinien verletzt, aber ich kann nicht sehen, dass ich falsch liege und hoffe, dass jemand es ausführlicher erklären kann.

PS. Ich fürchte, meine ursprüngliche Antwort auf die andere Frage wurde als Antwort gepostet, nicht als Kommentar, da ich noch nicht genügend Punkte habe, um Kommentare zu schreiben. Ich war mir nicht sicher, was das Beste war ...

    
Ben L 07.04.2013, 21:54
quelle

2 Antworten

6

Dies ist gemäß den Regeln für die Standardpriorität von Vorlagen korrekt. Ein Template, das mit foo übereinstimmt, hat die Standardpriorität 0, ein passendes * hat die Standardpriorität -0.5, aber ein passendes xml/* hat die Standardpriorität 0,5. Die xml/* Vorlage wird als spezifischer betrachtet als die foo one, also gewinnt sie, wenn eine Übereinstimmung gefunden werden kann.

Sie hatten also Recht, dass der Übereinstimmungsausdruck der Vorlage * statt xml/* sein musste, aber nicht aus dem richtigen Grund - eine xml/* Vorlage kann mit einer apply-templates select="*" übereinstimmen Wenn der aktuelle Knoten xml ist und auf alle ausgewählten Elemente angewendet wird (da sie alle untergeordnete Elemente von xml sind), außer wenn eine andere Vorlage mit einem expliziten priority größer als 0,5 vorhanden ist, das Vorrang haben kann.

    
Ian Roberts 07.04.2013, 22:10
quelle
4

Ich war die Person, die sagte, dass Sie in dem anderen Thread falsch waren, und nachdem ich die Angelegenheit näher betrachtet habe, kann ich sehen, dass Sie Recht hatten, indem Sie darauf hingewiesen haben, dass Tomalak einen Fehler gemacht hat. wenn ich deinen Kommentar richtig verstehe). match="xml/*" entspricht untergeordneten Knoten des Elements <xml> , unabhängig davon, ob der aktuelle Kontext der Knoten <xml> war oder nicht, wenn apply-templates aufgerufen wurde. In einem match="" -Ausdruck ist der "aktuelle Knoten" der Knoten, auf den Vorlagen angewendet werden, nicht der Kontext, in dem apply-templates aufgerufen wurde. In dieser Vorlage wäre also der aktuelle Knoten foo , bar und %Code%. Sie können oben aus Ihren eigenen Experimenten beobachten, dass baz erfolgreich untergeordnete Elemente von xml/* abgleicht, aber in der Tat mit ihnen übereinstimmt, mehr als Tomalak sagt, dass es ist.

Das Problem mit xml ist, dass es zu spezifisch ist und den gegenteiligen Effekt von dem hat, was Tomalak beabsichtigt hat. Es scheint, dass er damit gemeint war, dass alle Kinder von match="xml/*" ein Catch-all sind, die sonst nicht erreicht wurden, aber wie Ian Roberts erklärt, erreicht diese Vorlage eine höhere Priorität als die xml Vorlage und fängt alle untergeordneten Elemente des Knotens foo ab.

Ich weiß, es ist frustrierend, jetzt nicht in der Lage zu sein, eigene Kommentare zu schreiben, aber schon bald werden Sie es tun. Und es ist akzeptabel, eine eigene neue Frage zu erstellen, um eine Frage zu einem anderen Thread zu stellen. Sie sollten nur keine Antworten erstellen, um andere Antworten zu kommentieren.

    
JLRishe 07.04.2013 22:34
quelle

Tags und Links