2017-05-05 90 views
0

我有其中數據以這種方式來的XML文件:前置兄弟問題在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> 

的ZTAP和ZTAQ線的位置可以被改變,例如

<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> 

我需要選擇我可以通過模板匹配輕鬆完成的ZTAP LINES。但我也需要選擇所有那些以前的節點是ZTAQ的LINES。還有一些其他的線,TAD代碼不應該挑,所以,如果我把第二個例子,那麼結果應該是:

ZTAQ TEXT1 
ZTAQ TEXT2 
ZTAP TEXTVALUE 

我前面的兄弟姐妹語句與ZTAP和ZTAQ由於其他行代碼混合。 :

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> 

有人可以幫忙嗎?

回答

0

我需要選擇ZTAP LINES,我可以很容易地通過模板 匹配。但我也需要選擇所有那些其前面節點爲 ZTAQ的LINES。

如果我理解正確的這個,你要撥打:

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

從ROOT的情況下。