私はXMLのテキストを置き換える、よりシンプルで洗練された方法を探しています。ソースXMLのような場合:シンプルなXSLTテキストの置換
<A>
<B>
<Name>ThisOne</Name>
<Target>abc</Target>
</B>
<B>
<Name>NotThisOne</Name>
<Target>abc</Target>
</B>
<B>
<Name>ThisOne</Name>
<Target>def</Target>
</B>
</A>
私は「XYZ」に「ThisOne」の名前を持つすべてのターゲット要素のテキストを変更したいです。
結果は次のようになります。私は、これは< XSLで行うことができることを考えていた
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="B/Target">
<xsl:choose>
<xsl:when test="../Name/text()='ThisOne'"><Target>xyz</Target></xsl:when>
<xsl:otherwise><Target><xsl:value-of select="text()"/></Target></xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>
:テンプレートマッチ= "B /ターゲット/テキスト()
<A>
<B>
<Name>ThisOne</Name>
<Target>xyz</Target> <-- Changed.
</B>
<B>
<Name>NotThisOne</Name>
<Target>abc</Target>
</B>
<B>
<Name>ThisOne</Name>
<Target>xyz</Target> <-- Changed.
</B>
</A>
私はこれを達成">だから、要素全体ではなくテキストだけを置き換えることができましたが、残りの部分はわかりませんでした。
ありがとうございます。
興味深い - 3分で非常に似た3つの答え - 私は本当にここで実際の専門家の一人と文体の比較とコントラストを歓迎します。 *特に、*私のソリューションの改善を指摘した場合 – Kevan
@Kevan - あなたの答えの唯一の問題は、 ''要素に属性が含まれていた場合、その属性が取り除かれることです。 –
@DevNull - 良い点 - あなたの/ text()スタイルは、入力文書が変更され、ターゲット要素に属性を持つことが予期しない動作をする可能性は低い - 私は尋ねてうれしいよ:) –
Kevan