portal-column-content タグのクラス名を「その場で」変更する必要があります。これはレンダリングされた HTML コードです。
<div id="portal-column-content" class="cell width-9 position-1:4">
「width-9」だけを「width-12」に置き換えたい。
何かアドバイス?
ありがとう
ヴィート
あなたがアドバイスを求めるので、ここにいくつかあります:
cssクラスを使用して具体的なものを表すのではなく、意図を表すようにします。
インテントの具体的な実装はcssにあります。たとえば、という名前のクラスを作成するのではwidth-9
なく、という名前のクラスを作成しますportal-column-content
。portal-column-content
その後、 be width:9px
、width:12em
または何でも作ることができます。
このように文字列置換を行うことは、xsltで行うことではありません。 できたとしても。設定に応じて、他のより良い方法があります。
上記のアドバイスのいずれにも従えない/従わない場合は、
<?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>
この 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'
class
id
'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>
注意してください:
置換されるのは、属性が文字列値の div'width-9'
の属性の部分文字列のみです。別の属性を持つ他の要素は影響を受けません。class
id
'portal-column-content'
div
id
class
変換は、文字列値に含まれていない属性で正しく機能します -- 他の回答と比較してください。そのような場合の XSLT ソリューションは、属性'width-9'
の文字列値を完全に に置き換えます。class
'width-12'
これに「diazo」のタグを付けたので、最も簡単な解決策はおそらくジアゾルールを使用することです。ルールの前または後に置換を使用して、#portal-column-contentのコンテンツの子を正しく分類された#portal-column-contentのテーマの子にコピーします。
選択的に実行する場合は、「if」式を使用します。