私はXSLTにかなり慣れておらず、このトピックに関するいくつかの投稿をスキャンしましたが、この作業を行うために必要な最終的なピースを取得できないようです。私が持っているノードデータに表示される既知のデータ文字列からエントリを削除しようとしています。私は、単一ノードの値に対しては機能するが、複数の値に対しては機能しないソリューションをまとめました。
これが私のxmlです
<root>
<item>2</item>
<item>9</item>
<item>5</item>
</root>
これが1つのノード値に対して機能する私のコードです:
<xsl:template match="item">
<xsl:copy>
<xsl:call-template name="replaceChars">
<xsl:with-param name="original" select="string('1 2 3 4 5 6 7 8 9 10')"/>
</xsl:call-template>
</xsl:copy>
</xsl:template>
<xsl:template name="replaceChars">
<xsl:param name="original"/>
<xsl:choose>
<xsl:when test="contains($original, current())">
<xsl:value-of select="substring-before($original, current())"/>
<xsl:variable name="after" select="substring-after($original, current())"/>
<xsl:variable name="char" select="substring-before($after, current())"/>
<xsl:value-of select="concat($char, $after)"/>
<xsl:call-template name="replaceChars">
<xsl:with-param name="original" select="substring-after($after, current())"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$original"/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
私の最新のテストでは、これを使用しようとしています。
<xsl:template match="item">
<xsl:copy>
<xsl:call-template name="replaceChars">
<xsl:with-param name="original" select="string('1 2 3 4 5 6 7 8 9 10')"/>
</xsl:call-template>
</xsl:copy>
</xsl:template>
<xsl:template name="replaceChars">
<xsl:param name="original"/>
<xsl:choose>
<xsl:when test="contains($original, current())">
<xsl:variable name="before" select="substring-before($original, current())"/>
<xsl:variable name="after" select="substring-after($original, current())"/>
<xsl:variable name="char" select="substring-before($after, current())"/>
<xsl:variable name="new" select="concat($before, $after)"/>
<xsl:call-template name="replaceChars">
<xsl:with-param name="original" select="$new"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$original"/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
応答で値を数回繰り返して取得し続けます。出力を次のようにしたいと思います。
1 3 4 6 7 8 10
私の例は変更された検索シナリオに基づいていることがわかるので、私はこれを広範囲に検索しました。どんな助けでもいただければ幸いです。