構造と内容が変更される可能性があるという知識を持つ次の xml ファイルがあるとします。
<something>
<parent>
<child>Bird is the word 1.</child>
<child>Curd is the word 2.</child>
<child>Nerd is the word 3.</child>
</parent>
<parent>
<child>Bird is the word 4.</child>
<child>Word is the word 5.</child>
<child>Bird is the word 6.</child>
</parent>
</something>
提供された文字列のすべてのインスタンスを別のインスタンスに置き換えるために、xquery (および xslt も) を使用する方法が必要です。たとえば、「Bird」という単語を「Dog」に置き換えます。したがって、結果は次のようになります。
<something>
<parent>
<child>Dog is the word 1.</child>
<child>Curd is the word 2.</child>
<child>Nerd is the word 3.</child>
</parent>
<parent>
<child>Dog is the word 4.</child>
<child>Word is the word 5.</child>
<child>Dog is the word 6.</child>
</parent>
</something>
これが可能かどうかはわかりません。私が行ったすべての試みは、タグを排除しました。この例( http://geekswithblogs.net/Erik/archive/2008/04/01/120915.aspx )も試しましたが、ドキュメント全体ではなくテキスト用です。
助けてください!
アップデート
xslt 2.0 の提案が最適であると思われるため、実行してみました。私の場合に合わせて変更しようとしている間、私は乾き続けています。
xml パラメータを渡して、置換を定義したいと考えています。したがって、次のように xslt を変更します。
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:param name="list">
<words>
<word>
<search>Bird</search>
<replace>Dog</replace>
</word>
<word>
<search>word</search>
<replace>man</replace>
</word>
</words>
</xsl:param>
<xsl:template match="@*|*|comment()|processing-instruction()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="text()">
<xsl:param name="chosen" select="." />
<xsl:for-each select="$list//word">
<xsl:variable name="search"><xsl:value-of select="search" /></xsl:variable>
<xsl:analyze-string select="$chosen" regex="{$search}">
<xsl:matching-substring><xsl:value-of select="replace" /></xsl:matching-substring>
<xsl:non-matching-substring><xsl:value-of select="$chosen"/></xsl:non-matching-substring>
</xsl:analyze-string>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
結果は次のとおりです。
<something>
<parent>
<child>Bird is the word 1.Bird is the word 1.</child>
<child>Curd is the word 2.Curd is the word 2.</child>
<child>Nerd is the word 3.Nerd is the word 3.</child>
</parent>
<parent>
<child>Bird is the word 4.Bird is the word 4.</child>
<child>Word is the word 5.Word is the word 5.</child>
<child>Bird is the word 6.Bird is the word 6.</child>
</parent>
</something>
言うまでもありませんが、重複したり間違ったりしたくありません。
助けてください!