2015-11-02 66 views
0

我有一个如下的传入XML:我需要从传入的XML下移除<shoeboxImage>标记。用于移除xml标记的XSLT代码

传入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代码片段来做到这一点。

+0

我没有看到问题。你有什么尝试? – Kenney

回答

0

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

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

的想法是,在遇到shoeboxImage元素时,它会产生什么的元素本身,只是继续与孩子们。

0

您需要有一个标识模板和一个模板,它将删除元素shoeboxImage,但将保留其后代。

<?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>