2017-05-05 4 views
0

Vorstehende Ich habe eine XML-Datei, in der Daten auf diese Weise kommt:Geschwister Problem in XSLT 1.0

<ROOT> 
<LINE> 
    <CODE>ZTAP</CODE> 
    <TEXT>ZTAP TEXTVALUE</TEXT> 
</LINE> 
<LINE> 
    <CODE>TAD</CODE> 
    <TEXT>TAD TEXTVALUE1</TEXT> 
</LINE> 
<LINE> 
    <CODE>TAD</CODE> 
    <TEXT>TAD TEXTVALUE2</TEXT> 
</LINE> 
<LINE> 
    <CODE>ZTAQ</CODE> 
</LINE> 
<LINE> 
    <TEXT>ZTAQ TEXT1</TEXT> 
</LINE> 
<LINE> 
    <TEXT>ZTAQ TEXT2</TEXT> 
</LINE> 
</ROOT> 

Die Position ZTAP und ZTAQ Linien verändert werden kann, zum Beispiel

<ROOT> 
<LINE> 
    <CODE>ZTAQ</CODE> 
</LINE> 
<LINE> 
    <TEXT>ZTAQ TEXT1</TEXT> 
</LINE> 
<LINE> 
    <TEXT>ZTAQ TEXT2</TEXT> 
</LINE> 
<LINE> 
    <CODE>ZTAP</CODE> 
    <TEXT>ZTAP TEXTVALUE</TEXT> 
</LINE> 
<LINE> 
    <CODE>TAD</CODE> 
    <TEXT>TAD TEXTVALUE1</TEXT> 
</LINE> 
<LINE> 
    <CODE>TAD</CODE> 
    <TEXT>TAD TEXTVALUE2</TEXT> 
</LINE> 
</ROOT> 

I müssen die ZTAP LINES wählen, die ich leicht durch Vorlagenübereinstimmung tun kann. aber ich muss auch alle LINES auswählen, deren vorheriger Knoten ZTAQ ist. Es gibt nur wenige andere Linien mit TAD CODE, die abgeholt werden sollen nicht, also wenn ich das zweite Beispiel zu nehmen, dann führen sollen:

ZTAQ TEXT1 
ZTAQ TEXT2 
ZTAP TEXTVALUE 

Meine vorherige gleichrangige Anweisung durch andere Code-Zeilen mit ZTAP und ZTAQ mischte. :

xsl:template match="LINE" mode="test"> 
<xsl:if test="preceding-sibling::LINE[CODE = 'ZTAQ'] and not(preceding-sibling::LINE[CODE = 'ZTAP'</xsl:if> 
    </xsl:template> 

Könnte jemand bitte helfen?

Antwort

0

Ich muss die ZTAP LINES auswählen, die ich leicht durch Vorlage übereinstimmen kann. aber ich muss auch alle LINES auswählen, deren vorheriger Knoten ZTAQ ist.

Wenn ich das richtig verstehe, wollen Sie rufen:

<xsl:apply-templates select="LINE[CODE='ZTAP' or not(CODE) and preceding-sibling::LINE[CODE][1]/CODE='ZTAQ']/TEXT"/> 

aus dem Kontext der Wurzel.