[XSL/XPATH] Ist das folgende Elemente von Typ X?
Verfasst: 23.11.2012, 12:31
Hallo ich möchte ein XML in ein anderes XML transformieren mit Saxon + XSL.
Im Quell-XML gibt es das Tag "lText", was einem Listeneintrag entspricht. Es gibt leider kein übergeordnetes Listen-Tag o.ä. und ich kann das Quell-XML nicht anpassen. Ich möchte nun prüfen ob nach dem aktuellen lText-Tag kein weiteres kommt. Das Problem ist, dass zwischen lText-Tags auch einfach Text stehen kann (ohne Tags), der dann quasi zwischen zwei Listen steht.
Folgendes geht daher nicht in jedem Fall:
Weil der * nur Elemente, also keine Text-Nodes berücksichtigt. Wenn ich anstatt des * ein node() nehme, klappt es auch nicht. Ich vermute weil dazwischen halt noch Whitespace sind und node() auch Whitespace-Nodes erfasst.
Mein aktueller Versuch ist:
Die zweite Bedingung ist eigentlich entscheidend. Leider ist die Bedingung immer erfüllt, auch wenn nach einem lText-Tag ein weiteres folgt (mit Whitespaces dazwischen). Kann mir da jemand helfen? Wichtig ist wie gesagt, dass die nächste Node (die ein Tag oder eine Text-Node ist) kein lText-Tag sein soll, damit die Bedingung erfüllt wird.
Im Quell-XML gibt es das Tag "lText", was einem Listeneintrag entspricht. Es gibt leider kein übergeordnetes Listen-Tag o.ä. und ich kann das Quell-XML nicht anpassen. Ich möchte nun prüfen ob nach dem aktuellen lText-Tag kein weiteres kommt. Das Problem ist, dass zwischen lText-Tags auch einfach Text stehen kann (ohne Tags), der dann quasi zwischen zwei Listen steht.
Folgendes geht daher nicht in jedem Fall:
Code: Alles auswählen
<xsl:if test="not(following-sibling::*[1]/name() = 'lText')">
Mein aktueller Versuch ist:
Code: Alles auswählen
<xsl:if test="count(following-sibling::lText) = 0 or not((following-sibling::* | following-sibling::text())[1]/name() = 'lText')">