xsltでエンティティを見つけて置き換える必要があります。テンプレートマッチを使用せずにこれを行う必要があります。
私のxmlがこのようになっているとしましょう。
<root>
<p>Master's</p>
<p><blockFixed type="quotation"><p>let's</p></blockFixed></p>
<p>student's<featureFixed id=1/></p>
<p><blockFixed type="quotation"><p>nurse's</p></blockFixed></p>
<p>Master's</p>
</root>
に変更'
する必要’
があるので、出力は次のようになります。
<root>
<p>Master<apos>’</apos>s</p>
<p><blockFixed type="quotation"><p>let<apos>’</apos>s</p></blockFixed></p>
<p>student<apos>’</apos>s<featureFixed id=1/><\p>
<p><blockFixed type="quotation"><p>nurse<apos>’</apos>s</p></blockFixed></p>
<p>Master's</p>
</root>
テンプレート一致を使用してreplaceメソッドを使用しましたが、その後、 etcなどp
の他のタグに対して操作を実行できなくなりました。blockfixed
したがって、plsはこれを行うための単純なxsltを提案します。
次のxsltを使用しました。
<xsl:template match="p">
<xsl:copy>
<xsl:apply-templates select="current()/node()" mode="replace"/>
</xsl:copy>
</xsl:template>
<xsl:template match="text()" mode="replace">
<xsl:call-template name="replace-string">
<xsl:with-param name="text" select="."/>
<xsl:with-param name="from">'</xsl:with-param>
<xsl:with-param name="to" select="'’'"/>
</xsl:call-template>
</xsl:template>
<xsl:template name="replace-string">
<xsl:param name="text"/>
<xsl:param name="from"/>
<xsl:param name="to"/>
<xsl:choose>
<xsl:when test="contains($text, $from)">
<xsl:variable name="before" select="substring-before($text, $from)"/>
<xsl:variable name="after" select="substring-after($text, $from)"/>
<xsl:variable name="prefix" select="concat($before, $to)"/>
<xsl:copy-of select="$before"/>
<Apos>
<xsl:copy-of select="$to"/>
</Apos>
<xsl:call-template name="replace-string">
<xsl:with-param name="text" select="$after"/>
<xsl:with-param name="from" select="$from"/>
<xsl:with-param name="to" select="$to"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:copy-of select="$text"/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
前もって感謝します。