2012-07-31 1 views
0

Мне нужно преобразовать из одного файла XML (XHTML) в другой с помощью XSLT. Правила преобразования являются:XSLT Transformation - Несколько блоков с разными значениями атрибутов

  1. Значения ID = «t0b» и «T1B» должны быть заменены с идентификатором = «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> 

Я способный изменять, когда имеется только один блок <div class="q">CODE HERE</div>, используя шаблон идентификации и предложения на форуме, но когда блок повторяется несколько раз с разными значениями его атрибутов, тогда я не могу этого сделать. Пожалуйста, помогите мне в достижении этой задачи. Благодарю вас.

ответ

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> 

... а так же для другого сНу элемента.

Правило 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> 
+0

Спасибо большое за ответ. :) – RahulD