如何复制所有但有例外

时间:2016-03-17 14:13:53

标签: xml xslt

我尝试复制模板匹配的所有元素,属性和文本,但span class =" mark"注意事项。 源代码

<p><img src="note.jpg"/><span class="mark">Note:</span> Text <span class="mark">Text</span> Text</p>

代码应该在转换后看起来像

<note>
<p>Text <span class="new">Text</span> Text</p></note>

我的xls(它复制了span class =&#34; mark note:also)

<xsl:template match="p[img/@src='note.pjpg']">
  <note>
    <p>
      <xsl:apply-templates select="text()"/>
    </p>
  </note>
</xsl:template>

1 个答案:

答案 0 :(得分:0)

你的问题很混乱,因为:

  1. note.pngnote.jpg;
  2. 不匹配
  3. 我们不知道您拥有的其他模板;
  4. 您说要复制span以外的所有内容class =&#34;新&#34; - 但是你的输出显示的内容。
  5. 应用以下样式表:

    XSLT 1.0

    <xsl:stylesheet version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
    <xsl:strip-space elements="*"/>
    
    <!-- identity transform -->
    <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
    </xsl:template>
    
    <xsl:template match="p[img/@src='note.jpg']">
      <note>
        <p>
          <xsl:apply-templates select="text() | span[@class='new']"/>
        </p>
      </note>
    </xsl:template>
    
    </xsl:stylesheet>
    
    输入的

    将返回:

    <?xml version="1.0" encoding="UTF-8"?>
    <note>
       <p> Text <span class="new">Text</span> Text</p>
    </note>
    

    编辑:

    要保留span以外的所有内容class =&#34;标记&#34;,请执行:

    <xsl:template match="p[img/@src='note.jpg']">
      <note>
        <p>
          <xsl:apply-templates select="node()[not(self::span[@class='mark'])]"/>
        </p>
      </note>
    </xsl:template>
    

    编辑2:

    要保留除span =&#34;标记&#34;之外的所有内容,您可以执行以下操作:

    class