1

我的目标是允许访问元素“p”的某些属性(作为新的子元素),同时将其余的原始内容放到一个新的同级子元素“p1”,然后在编辑完成后返回到原始结构完毕。

所以原来的节点是这样的:

<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”(这会将节点向上移动一步)。如何才能做到这一点?非常感谢 - 克里斯

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 回答