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" />あります(ファイルでも同様)

入力ファイル:

<?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>

ID テンプレートとフォーラムでの提案を使用してブロックが 1 つしかない場合は変更できますが<div class="q">CODE HERE</div>、ブロックがその属性の異なる値で複数回繰り返される場合は変更できません。このタスクを達成するために私を助けてください。ありがとうございます。

4

1 に答える 1

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>
于 2012-07-31T14:39:29.193 に答える