1

私の目標は、元のコンテンツの残りを新しい兄弟の子「p1」に配置しながら、要素「p」の特定の属性(新しい子要素として)へのアクセスを許可し、編集後に元の構造に戻ることです。終わり。

したがって、元のノードは次のようになります。

<p attr1="..." attr2="..." moreattr1="..." moreattr2="...">...content,more nodes,etc...</p>

私の「編集可能な」構造は次のとおりです。

<p>
   <attr1edit value="...">
   <attr2edit value="...">
   <p1 moreattr1="..." moreattr2="...">...content,more nodes...</p1>
</p>

"p1" は、先頭の属性要素を除いて、以前の "p" のすべてのコンテンツを取得しています。

元の構造に戻ろうとすると、この時点で行き詰まります。

属性 (attr1、attr2) を他の属性と一緒に "p1" に戻すことはできますが、"p1" の内容全体を "p" に戻し、"p1" を削除する方法がわかりません。 、または「p」を削除し、「p1」の名前を「p」に変更します(ノードを1ステップ上に移動します)。これはどのように行うことができますか?どうもありがとうございました - クリス

4

1 に答える 1

2

スタイルシート

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

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

<xsl:template match="p">
  <xsl:copy>
    <xsl:apply-templates select="*[not(self::p1)] | p1/@*"/>
    <xsl:apply-templates select="p1/node()"/>
  </xsl:copy>
</xsl:template>

<xsl:template match="p/*">
  <xsl:attribute name="{substring-before(name(), 'edit')}">
    <xsl:value-of select="@value"/>
  </xsl:attribute>
</xsl:template>

</xsl:stylesheet>

変形する

<p>
   <attr1edit value="..."/>
   <attr2edit value="..."/>
   <p1 moreattr1="..." moreattr2="...">...content,more nodes...</p1>
</p>

の中へ

<p attr1="..." attr2="..." moreattr1="..." moreattr2="...">...content,more nodes...</p>
于 2013-08-01T09:33:32.787 に答える