我正在使用xml,并且尝试查找具有内部文本的节点,123
然后找到其后继或先行同级duration
,然后替换其值。
XML:
<?xml version="1.0" encoding="utf-8" ?>
<classes>
<class>
<id>123</id>
<duration>100</duration>
<price>price</price>
</class>
<class>
<id>234</id>
<duration>10</duration>
<price>100</price>
</class>
<class>
<id>123</id>
<duration>120</duration>
<price>price</price>
</class>
</classes>
XSLT:
<xsl:template match="id[text()='123']">
<xsl:copy>
<xsl:if test="count(following-sibling::duration) or count(preceding-sibling::duration)">
<xsl:text>abc</xsl:text>
</xsl:if>
<xsl:apply-templates select="@*|node()" />
</xsl:copy>
</xsl:template>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()" />
</xsl:copy>
</xsl:template>
输出:
<?xml version="1.0" encoding="utf-8" ?>
<classes>
<class>
<id>123</id>
<duration>newValue</duration>
<price>price</price>
</class>
<class>
<id>234</id>
<duration>10</duration>
<price>100</price>
</class>
<class>
<id>123</id>
<duration>newValue</duration>
<price>price</price>
</class>
</classes>
请帮忙。提前致谢。
尝试:
<xsl:template match="class[id='123']/duration">
<xsl:copy>
<xsl:text>abc</xsl:text>
</xsl:copy>
</xsl:template>
或者:
<xsl:template match="duration[../id='123']">
<xsl:copy>
<xsl:text>abc</xsl:text>
</xsl:copy>
</xsl:template>
代替:
<xsl:template match="id[text()='123']">
<xsl:copy>
<xsl:if test="count(following-sibling::duration) or count(preceding-sibling::duration)">
<xsl:text>abc</xsl:text>
</xsl:if>
<xsl:apply-templates select="@*|node()" />
</xsl:copy>
</xsl:template>
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句