1

以前は XSLT をしたことがありませんでした。ドキュメントを継承して 1 つのタグだけを置き換えることは可能ですか? はいの場合、例を教えてください。

ありがとうございました

4

2 に答える 2

3

テンプレートから始めます

<xsl:template match="@* | node()">
  <xsl:copy>
   <xsl:apply-templates select="@* | node()"/>
  </xsl:copy>
</xsl:template>

次に、変換したいノードを変換するためのテンプレートを追加します。

<xsl:template match="td">
  <th>
    <xsl:apply-templates select="@* | node()"/>
  </th>
<xsl:template>

すべてのtd要素をth要素に変換するか、

<xsl:template match="h6"/>

h6すべての要素を削除します。

単一のものを変換したい場合は、それを識別する方法が必要です。属性が次のような一致パターンを使用tdしていると仮定しますid

<xsl:template match="td[@id = 'td1']">
  <td style="background-color: lightgreen;">
    <xsl:apply-templates select="@* | node()"/>
  </td>
</xsl:template>

そのサンプルは、特定の要素の CSSbackground-colorプロパティを設定します。td

于 2012-10-23T09:52:41.567 に答える
0

このタスクは、最も基本的な XSLT デザイン パターンである同一性規則の使用とオーバーライドで処理するのが最適です。

次の XML ドキュメントを用意してみましょう。

<root>
   <x>This is:</x>
   <a>
      <b>
         <c>hello</c>
      </b>
   </a>
   <a>
      <b>
         <c1>world</c1>
      </b>
   </a>
   <a>
      <b>!</b>
   </a>
   <y>The End</y>
</root>

タスクは次のとおりです。

  1. cすべての要素を削除します。

  2. b要素の名前を に変更しdます。

  3. c2任意の要素の後に要素を挿入しc1ます。

ソリューションは驚くほど短くてシンプルです。

<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()|@*" name="identity">
     <xsl:copy>
       <xsl:apply-templates select="node()|@*"/>
     </xsl:copy>
 </xsl:template>

 <xsl:template match="c"/>

 <xsl:template match="b">
  <d><xsl:apply-templates select="node()|@*"/></d>
 </xsl:template>

 <xsl:template match="c1">
  <xsl:call-template name="identity"/>
  <c2>xxx</c2>
 </xsl:template>
</xsl:stylesheet>

この変換を上記の XML ドキュメントに適用すると、必要な正しい結果が生成されます。

<root>
   <x>This is:</x>
   <a>
      <d/>
   </a>
   <a>
      <d>
         <c1>world</c1>
         <c2>xxx</c2>
      </d>
   </a>
   <a>
      <d>!</d>
   </a>
   <y>The End</y>
</root>

説明:

  1. ID テンプレートは、実行のために選択されるか、名前で呼び出されると、現在のノードを「そのまま」コピーします。

  2. 特別なタスク (削除、挿入、名前の変更) ごとに、必要なノードに一致する別のテンプレートを追加し、より高い特異性のために ID テンプレートをオーバーライドします。

  3. オーバーライドするより具体的なテンプレートは、一致するノードで実行するために選択され、実行する必要があるタスクを実行します。

于 2012-10-23T12:14:05.340 に答える