1

portal-column-content タグのクラス名を「その場で」変更する必要があります。これはレンダリングされた HTML コードです。

<div id="portal-column-content" class="cell width-9 position-1:4">

「width-9」だけを「width-12」に置き換えたい。
何かアドバイス?
ありがとう
ヴィート

4

3 に答える 3

2

あなたがアドバイスを求めるので、ここにいくつかあります:

  1. cssクラスを使用して具体的なものを表すのではなく、意図を表すようにします。 インテントの具体的な実装はcssにあります。たとえば、という名前のクラスを作成するのではwidth-9なく、という名前のクラスを作成しますportal-column-contentportal-column-contentその後、 be width:9pxwidth:12emまたは何でも作ることができます。

  2. このように文字列置換を行うことは、xsltで行うことではありません。 できたとしても。設定に応じて、他のより良い方法があります。

  3. 上記のアドバイスのいずれにも従えない/従わない場合は、

    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    version="1.0">
    
        <xsl:template match="@*|node()">
            <xsl:copy>
                <xsl:apply-templates select="@*|node()"/>
            </xsl:copy>
        </xsl:template>
    
        <xsl:template match="@class">
            <xsl:attribute name="class">
            <xsl:value-of select="substring-before(.,'width-9')"/>width-12<xsl:value-of select="substring-after(.,'width-9')"/>
            </xsl:attribute>
        </xsl:template>
    </xsl:stylesheet>
    
于 2012-06-04T11:20:24.737 に答える
1

この XSLT 1.0 変換:

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>
 <xsl:strip-space elements="*"/>

 <xsl:template match="node()|@*">
     <xsl:copy>
       <xsl:apply-templates select="node()|@*"/>
     </xsl:copy>
 </xsl:template>

 <xsl:template match="div[@id='portal-column-content']/@class">
  <xsl:attribute name="class">
   <xsl:value-of select=
    "substring-before(concat(.,'width-9'), 'width-9')"/>
   <xsl:value-of select="'width-12'"/>
   <xsl:value-of select="substring-after(., 'width-9')"/>
  </xsl:attribute>
 </xsl:template>
</xsl:stylesheet>

次のサンプル XML ドキュメントに適用した場合:

<html>
    <div id="a" class="a"/>
    <div id="b" class="b"/>
    <div id="c" class="cell width-9 position-1:4"/>
    <div id="portal-column-content" class="cell width-9 position-1:4"/>
    <div id="d" class="d"/>
    <div id="e" class="cell width-9 position-1:4"/>
</html>

必要な正しい結果を生成します(文字列値を持つ属性を持つdivの属性の部分文字列のみが置き換えられます:'width-9'classid'portal-column-content'

<html>
   <div id="a" class="a"></div>
   <div id="b" class="b"></div>
   <div id="c" class="cell width-9 position-1:4"></div>
   <div id="portal-column-content" class="cell width-12 position-1:4"></div>
   <div id="d" class="d"></div>
   <div id="e" class="cell width-9 position-1:4"></div>
</html>

注意してください:

  1. 置換されるのは、属性が文字列値の div'width-9'の属性の部分文字列のみです。別の属性を持つ他の要素は影響を受けません。classid'portal-column-content'divid

  2. class変換は、文字列値に含まれていない属性で正しく機能します -- 他の回答と比較してください。そのような場合の XSLT ソリューションは、属性'width-9'の文字列値を完全に に置き換えます。class'width-12'

于 2012-06-04T12:22:23.220 に答える
0

これに「diazo」のタグを付けたので、最も簡単な解決策はおそらくジアゾルールを使用することです。ルールの前または後に置換を使用して、#portal-column-contentのコンテンツの子を正しく分類された#portal-column-contentのテーマの子にコピーします。

選択的に実行する場合は、「if」式を使用します。

于 2012-06-04T15:14:47.910 に答える