如何从输出中删除key
节点?
xml(有多个像这样的xmls)
<XMLResponse>
<ServiceProduct>
<ProductInfo><ProductCode>1001</ProductCode></ProductInfo>
<ProductType>BLACK</ProductType>
<AvailableProduct>
<ProductName>PRODUCT NAME ONE</ProductName>
</AvailableProduct>
<AvailableProduct>
<ProductName>PRODUCT NAME TWO</ProductName>
</AvailableProduct>
</ServiceProduct>
<ServiceProduct>
<ProductInfo><ProductCode>1001</ProductCode></ProductInfo>
<ProductType>BLACK</ProductType>
<AvailableProduct>
<ProductName>PRODUCT NAME ONE</ProductName>
</AvailableProduct>
<AvailableProduct>
<ProductName>PRODUCT NAME TWO</ProductName>
</AvailableProduct>
</ServiceProduct>
<ServiceProduct>
<ProductInfo><ProductCode>1001</ProductCode></ProductInfo>
<ProductType>BLACK</ProductType>
<AvailableProduct>
<ProductName>PRODUCT NAME ONE</ProductName>
</AvailableProduct>
<AvailableProduct>
<ProductName>PRODUCT NAME THREE</ProductName>
</AvailableProduct>
</ServiceProduct>
<ServiceProduct>
<ProductInfo><ProductCode>1002</ProductCode></ProductInfo>
<ProductType>BLACK</ProductType>
<AvailableProduct>
<ProductName>PRODUCT NAME ONE</ProductName>
</AvailableProduct>
<AvailableProduct>
<ProductName>PRODUCT NAME TWO</ProductName>
</AvailableProduct>
</ServiceProduct>
</XMLResponse>
XSL
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:exsl="http://exslt.org/common" exclude-result-prefixes="exsl">
<xsl:output method="xml" indent="yes"/>
<xsl:key name="ServiceByGroup" match="ServiceProduct" use="concat(ProductInfo/ProductCode,'|',ProductType)"/>
<xsl:template match="XMLResponse">
<xsl:copy>
<xsl:variable name="msNodes">
<xsl:apply-templates select="document('01_rs_01.xml')/*/ServiceProduct[ProductInfo/ProductCode != '']">
</xsl:apply-templates>
</xsl:variable>
<ServiceList>
<xsl:apply-templates select="exsl:node-set($msNodes)/ServiceProduct [generate-id() = generate-id(key('ServiceByGroup', concat(ProductInfo/ProductCode,'|',ProductType))[1])]"/>
</ServiceList>
</xsl:copy>
</xsl:template>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
我在xsl
中尝试如下<xsl:template match="ProductType"/>
当我应用上面的模板时,它会从输出中删除<ProductType>
,但<xsl:apply-templates
无法正常工作
我需要像下面那样放
<XMLResponse>
<ServiceProduct>
<ProductInfo><ProductCode>1001</ProductCode></ProductInfo>
<AvailableProduct>
<ProductName>PRODUCT NAME ONE</ProductName>
</AvailableProduct>
<AvailableProduct>
<ProductName>PRODUCT NAME TWO</ProductName>
</AvailableProduct>
</ServiceProduct>
<ServiceProduct>
<ProductInfo><ProductCode>1001</ProductCode></ProductInfo>
<AvailableProduct>
<ProductName>PRODUCT NAME ONE</ProductName>
</AvailableProduct>
<AvailableProduct>
<ProductName>PRODUCT NAME THREE</ProductName>
</AvailableProduct>
</ServiceProduct>
<ServiceProduct>
<ProductInfo><ProductCode>1002</ProductCode></ProductInfo>
<AvailableProduct>
<ProductName>PRODUCT NAME ONE</ProductName>
</AvailableProduct>
<AvailableProduct>
<ProductName>PRODUCT NAME TWO</ProductName>
</AvailableProduct>
</ServiceProduct>
</XMLResponse>