插入一个值取决于其兄弟值的节点

时间:2014-10-30 16:00:04

标签: xml variables xslt copy

这是一个例子,我想知道它是否可能。

我有一些我想循环的xml并检查值取决于我想要插入一个值。

我基本上希望它的工作原理是: 如果node1 = aa或ab node0 =太棒了 和 如果node1 = bc或bd node0 =美丽

但是我只希望node0在集合的第一个节点0中显示漂亮或真棒。

这是输入

<parent>
    <sibling>
        <node1>aa</node1>
        <node2></node2>
        <node3></node3>
        <node4></node4>
        <node5></node5>
    </sibling>
    <sibling>
        <node1>ab</node1>
        <node2></node2>
        <node3></node3>
        <node4></node4>
        <node5></node5>
     </sibling>
    <sibling>
        <node1>bb</node1>
        <node2></node2>
        <node3></node3>
        <node4></node4>
        <node5></node5>
    </sibling>
    <sibling>
        <node1>bc</node1>
        <node2></node2>
        <node3></node3>
        <node4></node4>
        <node5></node5>
    </sibling>
    <sibling>
        <node1>bd</node1>
        <node2></node2>
        <node3></node3>
        <node4></node4>
        <node5></node5>
    </sibling>
</parent>

输出

<parent>
    <sibling>
        <node0>awesome</node0>
        <node1>aa</node1>
        <node2></node2>
        <node3></node3>
        <node4></node4>
        <node5></node5>
    </sibling>
    <sibling>
        <node0></node0>
        <node1>ab</node1>
        <node2></node2>
        <node3></node3>
        <node4></node4>
        <node5></node5>
    </sibling>
    <sibling>
        <node0>beautiful</node0>
        <node1>bb</node1>
        <node2></node2>
        <node3></node3>
        <node4></node4>
        <node5></node5>
    </sibling>
    <sibling>
        <node0></node0>
        <node1>bc</node1>
        <node2></node2>
        <node3></node3>
        <node4></node4>
        <node5></node5>
    </sibling>
    <sibling>
        <node0></node0>
        <node1>bd</node1>
        <node2></node2>
        <node3></node3>
        <node4></node4>
        <node5></node5>
    </sibling>
</parent>

1 个答案:

答案 0 :(得分:1)

我相信这会做你想要的:

XSLT 1.0

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>

<!-- identity transform -->
<xsl:template match="@*|node()">
    <xsl:copy>
        <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
</xsl:template>

<xsl:template match="sibling[node1='aa' or node1='ab'][1]">
    <xsl:copy>
        <node0>awesome</node0>
        <xsl:apply-templates select="node()"/>
    </xsl:copy>
</xsl:template>

<xsl:template match="sibling[node1='bb' or node1='bc'][1]">
    <xsl:copy>
        <node0>beautiful</node0>
        <xsl:apply-templates select="node()"/>
    </xsl:copy>
</xsl:template>

<xsl:template match="sibling">
    <xsl:copy>
        <node0/>
        <xsl:apply-templates select="node()"/>
    </xsl:copy>
</xsl:template>

</xsl:stylesheet>