用于删除xml标记的XSLT代码

时间:2015-11-02 19:02:54

标签: xslt

我有一个传入的XML,如下所示:我需要从传入的下面的XML中删除<shoeboxImage>标记。

传入XML输入:

<attachReceipt>
   <baseMessage>
      <returnCode>200</returnCode>
   </baseMessage>
   <payload>
      <returnCode>0</returnCode>
      <shoeboxItem>
         <shoeboxImageCount>2</shoeboxImageCount>
         <shoeboxImages>
            <shoeboxImage>
               <name>receiptImage.jpg</name>
            </shoeboxImage>
            <shoeboxImage>
               <name>receiptImage.jpg</name>
            </shoeboxImage>
         </shoeboxImages>
      </shoeboxItem>
   </payload>
</attachReceipt>

预期产出:

<attachReceipt>
   <baseMessage>
      <returnCode>200</returnCode>
   </baseMessage>
   <payload>
      <returnCode>0</returnCode>
      <shoeboxItem>
         <shoeboxImageCount>2</shoeboxImageCount>
         <shoeboxImages>
            <name>receiptImage.jpg</name>
            <name>receiptImage.jpg</name>
         </shoeboxImages>
      </shoeboxItem>
   </payload>
</attachReceipt>

需要一些xslt代码段才能执行此操作。

2 个答案:

答案 0 :(得分:0)

我没有安装必要的软件来实际测试,但这应该有效:

<xsl:template match="shoeboxImage">
   <xsl:apply-templates select="*|text()"/>
</xsl:template>

这个想法是当遇到shoeboxImage元素时,它不会为元素本身生成任何内容,只会继续其子元素。

答案 1 :(得分:0)

您需要拥有一个标识模板和一个模板,该模板将删除元素<?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:strip-space elements="*"/> <xsl:output indent="yes"/> <!-- identity template --> <xsl:template match="node()|@*"> <xsl:copy> <xsl:apply-templates select="node()|@*"/> </xsl:copy> </xsl:template> <!-- template override for the element shoeboxImage --> <xsl:template match="shoeboxImage"> <xsl:apply-templates/> </xsl:template> </xsl:stylesheet> ,但会保留其后代。

String.format()