1

我需要在 portal-column-content 标记中“即时”修改一个类名,这是呈现的 html 代码:

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

我只想用“width-12”替换“width-9”。
有什么建议吗? 谢谢维托
_

4

3 回答 3

2

既然你征求意见,这里有一些:

  1. 不要使用 css 类来表示任何具体的东西,让它表示意图。 意图的具体实现来自 css。例如,不要创建一个名为的类width-9,而是创建一个名为的类portal-column-content。然后你可以做portal-column-contentbe 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. 唯一被替换的是任何具有字符串 value属性的 div'width-9'的属性的子字符串。具有不同属性的其他元素不受影响。classid'portal-column-content'divid

  2. 转换正确地适用于class属性,其字符串值不包含'width-9'-- 与另一个答案进行比较,在这种情况下,其 XSLT 解决方案将class属性的字符串值完全替换为'width-12'.

于 2012-06-04T12:22:23.220 回答
0

由于您已将其标记为“重氮”,因此最简单的解决方案可能是使用重氮规则。只需在规则之前或之后使用替换将#portal-column-content 的内容子项复制到正确分类的#portal-column-content 的主题子项。

如果要选择性地完成,请使用“if”表达式。

于 2012-06-04T15:14:47.910 回答