-1

私はこのようなxmlを持っています:

<xml>
    <node name="1">node1</node>
    <node name="2">node2</node>
    <node name="3">node3</node>
    <node>node4</node>
</xml>

属性<node name="3">node3</node>を持つ最後のノードであることを確認するにはどうすればよいですか?@name

4

2 に答える 2

1

ここでは、次の兄弟演算子を使用できます。ノード要素に配置されていると仮定すると、現在のノードに名前属性があることを確認するだけで済みますが、次の兄弟はありません

<xsl:if test="@name and not(following-sibling::node[@name])">

これは、テンプレート マッチの一部として行うこともできます。

<xsl:template match="node[@name][not(following-sibling::node[@name])]">

たとえば、次の XSLT を試してください。

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" indent="yes"/>

    <xsl:template match="node[@name][not(following-sibling::node[@name])]">
        <xsl:copy>
                <xsl:attribute name="last">1</xsl:attribute>
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
    </xsl:template>

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

XML に適用すると、以下が出力されます。

<xml>
   <node name="1">node1</node>
   <node name="2">node2</node>
   <node last="1" name="3">node3</node>
   <node>node4</node>
</xml>

編集: 実際、テンプレート マッチでは、ここでlastを利用できます。次のテンプレート マッチも機能するはずです。

<xsl:template match="node[@name][last()]">
于 2013-01-18T08:57:33.400 に答える
0

このコードを使用しました:

<xsl:template match="/node/[@name='3'][last()]"> 
于 2013-01-18T09:02:28.590 に答える