1

質問に続いて、ノード XSLT からすべての \n\r 文字を削除しますか? 私はこのソリューションを使用していますが、このシナリオに出くわしました-

すべてのノードで改行文字を置き換えたくない場合はどうでしょうか。例- Description や Instructions などの特定のノードは、ユーザーが Web ページに入力した場合に新しい行を保存するためのものです。

<T>
    <Name>Translate test</Name>
    <AlternateId>testid1</AlternateId>
    <Description>Translate test</Description>
    <Instructions>there is a new line between line1 and line2
    line1-asdfghjkl
    line2-asdfghjkl</Instructions>
    <Active>1</Active>
</T>

translate(.,' ','') を使用した後、xml は次のようになります。

<T>
    <Name>Translate test</Name>
    <AlternateId>testid1</AlternateId>
    <Description>Translate test</Description>
    <Instructions>there is a new line between line1 and line2line1-asdfghjklline2-asdfghjkl</Instructions>
    <Active>1</Active>
</T>

翻訳したくないタグが 100 個以上あります。このような不要なタグの翻訳を無視する方法はありますか? タイムリーなヘルプをいただければ幸いです。

よろしく、アシッシュK

4

2 に答える 2

0

一致属性で要素をフィルタリングできます

<xsl:template match="*[name() = 'Instructions']/text()">
    <xsl:value-of select="translate(.,'&#xA;','')"/>
</xsl:template>

これは、「命令要素でのみ改行文字を置き換える」のようなものを意味します。

編集:

置換対象の要素の名前を含む外部ヘルパー xml ファイルを作成できます。

<?xml version="1.0" encoding="UTF-8"?>
<Replace>
    <Description />
    <Instructions />
</Replace>

document()関数で変数にロードする

<xsl:variable name="elementsForReplacing" select="document('replaceNames.xml')/Replace/*" />

次に、この変数の存在を確認して、置換を行う必要があるかどうかを判断します。

<xsl:template match="text()">
    <xsl:variable name="elementName" select="name(..)" />
    <xsl:choose>
        <xsl:when test="$elementsForReplacing[name() = $elementName]">
            <xsl:value-of select="translate(.,'&#xA;','')"/>
        </xsl:when>
        <xsl:otherwise>
            <xsl:value-of select="." />
        </xsl:otherwise>
    </xsl:choose>
</xsl:template>
于 2013-07-16T09:59:19.780 に答える