So wählen Sie das Großelternteil eines Knotens mit xslt aus

7

Ich bin in einer Situation, in der ich nur nach dem Kind-Knoten testen kann, aber ich muss Tags auf das Großelternteil dieses Kind-Knotens anwenden.

Ich habe versucht mit:

%Vor%

und:

%Vor%

Aber beides funktioniert nicht.

Das Level des Großeltern-Knotens ist nicht festgelegt, daher kann ich auch nicht [@ level = #] verwenden. Irgendwelche Ideen, wie man es wählt, würde sehr geschätzt werden.

BEARBEITEN: - Dieser Teil wurde als neue Frage veröffentlicht:

xslt wählt Großelternteil aus Knoten abhängig von einem Attributwert seines Enkelknotens

Die Auswahl des Knotens mit den Vorschlägen von unten funktioniert. Vielen Dank! Allerdings muss ich auch nach dem Attribut des Großeltern- oder Enkelknotens testen.

Ich habe es versucht:

%Vor%

Die Vorlage "zwei" wird jedoch immer aufgerufen, und "" wird immer eingefügt. Selbst für Enkelknoten, deren Attributwert ungleich 'attrValue' ist.

Fehle ich hier etwas?

    
highlightall 09.09.2010, 00:38
quelle

2 Antworten

17
  

Ich habe versucht mit:

%Vor%      

und:

%Vor%      

Aber beides funktioniert nicht.

Sicherlich wird es nicht funktionieren, weil die <xsl:call-template> Anweisung kein select Attribut hat!

Sie können Parameter übergeben, indem Sie <xsl:with-param> untergeordnete Elemente der Anweisung <xsl:call-template> wie folgt verwenden:

%Vor%

Für das select -Attribut von <xsl:with-param> Verwenden Sie :

Für ein echtes Großelternteil:

%Vor%

für das nächste Vorgängerelement mit dem Namen someName :

%Vor%

für das nächstgelegene Vorgängerelement mit dem Namen in der Variablen $ancName :

%Vor%     
Dimitre Novatchev 09.09.2010, 00:45
quelle
4
  

Ich bin in einer Situation, in der ich nur den Kindknoten testen kann, aber ich muss Tags auf den Großelternteil dieses Kindknotens anwenden.

XSLT ist keine prozedurale Programmierung, Sie müssen also etwas anders darüber nachdenken.

Wenn ich es richtig verstanden habe, möchten Sie neue Tags (zusätzliche untergeordnete Elemente oder Attribute?) in Ihre XML-Datei einfügen, aber Sie möchten sie zu einem Vorgänger hinzufügen, wenn Sie einen bestimmten Nachfolger finden. Ihr Beispielcode scheint zu versuchen, das Großelternteil anzusprechen, sobald Sie auf das Kind stoßen. Leider kann das zu spät sein.

Möglicherweise müssen Sie das neue Element / Attribut injizieren, wenn die Engine auf das Element trifft, das Sie ändern möchten (das Großelternteil in Ihrem Fall), nicht wenn es auf das untergeordnete Element trifft Am Ende fügst du dem Kind Elemente oder Attribute hinzu)

Betrachten Sie diese Eingabe (grandchild="album", enkel="label"):

%Vor%

Ich möchte die album basierend darauf ändern, ob eine bestimmte label vorhanden ist. Beachten Sie, dass das allgemeine Format für Targeting-Knoten lautet: target-node[target-condition] . Um album -Elemente zu ändern, die ein Capitol label-Enkelelement haben, würde ich folgendes verwenden:

%Vor%

Betrachten Sie dieses Stylesheet also, um album ein neues Attribut und zwei neue Kindelemente hinzuzufügen, die meiner Bedingung entsprechen:

%Vor%

Ausgabe (manuell formatiert):

%Vor%

Einige Sandbox-Testressourcen:

Bert F 09.09.2010 02:16
quelle

Tags und Links