在xslt 1.0之前出现兄弟姐妹问题

时间:2017-05-05 01:07:01

标签: xml xslt xpath

我有一个XML文件,其中数据以这种方式出现:

<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 CODE的LINED不应该被选中,所以如果我采用第二个例子,那么结果应该是:

ZTAQ TEXT1
ZTAQ TEXT2
ZTAP TEXTVALUE

由于其他CODE LINES,我之前的兄弟声明正在与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>

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

  

我需要选择ZTAP LINES,我可以通过模板轻松完成   比赛。但我还需要选择其前一个节点所有的LINES   ZTAQ。

如果我理解正确,你想打电话:

history.pushState(null, document.title, location.href);
window.addEventListener('popstate', function (event) {
   history.pushState(null, document.title, location.href);
});
来自ROOT的背景。