私はこのような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
私はこのような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
ここでは、次の兄弟演算子を使用できます。ノード要素に配置されていると仮定すると、現在のノードに名前属性があることを確認するだけで済みますが、次の兄弟はありません
<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()]">
このコードを使用しました:
<xsl:template match="/node/[@name='3'][last()]">