XSLT转换 - 具有不同属性值的多个块

时间:2012-07-31 13:37:09

标签: xml xslt xhtml xslt-1.0

我必须使用XSLT从一个XML(XHTML)文件转换为另一个。转型规则是:

  1. id =“t0b”和“t1b”的值必须分别用id =“ta0b8”和“ta3b8”代替。
  2. <input type="radio" name="o0" id="t0"/>必须替换为<input type="radio" name="key0b8" value="0" id="ta0q" class="block" />(同样在文件中)
  3. 输入文件:

    <?xml version="1.0" encoding="utf-8"?>
        <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
        <html xmlns="http://www.w3.org/1999/xhtml">
        <head>
        <meta http-equiv="Content-type" content="text/html;  charset=utf-8" />
        </head>  
        <body>
          <div class="iDev">
    
            <div class="q">
              <div id="t0b" class="block">1<span style="color">TEXT1</span>
              </div><br />
              T <input type="radio" name="o0" id="t0"/> 
              F <input type="radio" name="op0" id="f0"/>
              <div id="sfb"></div>
            </div><br />
    
            <div class="q">
              <div id="t1b" class="block">2<span style="color">TEXT2</span>
              </div><br />
              T <input type="radio" name="o1" id="t1" /> 
              F <input type="radio" name="op1" id="f1" />
              <div id="sfb"></div>
            </div>
          </div>
        </body>
        </html>
    

    输出文件:

    <?xml version="1.0" encoding="utf-8"?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html;  charset=utf-8" />
    </head>
    <body>
      <div class="iDev">
    
        <div class="q">
          <div id="ta0b8" class="block">1<span style="color">TEXT1</span>
          </div><br />
          T<input type="radio" name="key0b8" value="0" id="ta0q" />
          F<input type="radio" name="key0b8" value="1" id="ta1q" />
          <div id="sfb"></div>
        </div><br />
    
        <div class="q">
          <div id="ta3b8" class="block">2 <span style="color">TEXT2</span>
          </div><br />
          T<input type="radio" name="key3b8" value="0" id="ta0q3" />
          F<input type="radio" name="key3b8" value="1" id="ta1q3" />
          <div id="sfb"></div>
        </div>
      </div>
    </body>
    </html>
    

    我可以通过使用身份模板和论坛中的建议来修改<div class="q">CODE HERE</div>只有一个块时,但是当块重复多次使用不同的属性值时,我就不会能够这样做。请帮助我完成这项任务。感谢你。

1 个答案:

答案 0 :(得分:1)

规则1可以通过......实现。

<xsl:template match="div[@id='t0b']">
  <xsl:copy>
   <xsl:copy-of select="@*" />
   <xsl:attribute name="id">ta0b8</xsl:attribute>
   <xsl:apply-templates select="node()" />
  </xsl:copy>
</xsl:template>

......和其他div元素类似。

规则2可以通过......实施。

<xsl:template match="input[@name='o0']">
  <xsl:copy>
   <xsl:copy-of select="@*" />
   <xsl:attribute name="name">key0b8</xsl:attribute>
   <xsl:attribute name="value">0</xsl:attribute>
   <xsl:attribute name="id">ta0q</xsl:attribute>
   <xsl:attribute name="class">block</xsl:attribute>
   <xsl:apply-templates select="node()" />
  </xsl:copy>
</xsl:template>