0
我有一个类似于下面的xml,其中有一个以“plural”命名的标记,其中包含一个以“singular”命名的标记数组。例如marketHierarchyLevels & marketHierarchyLevel,archiveLevels & archiveLevel。使用xslt删除特定标记
我想用xslt来识别这些模式并删除“复数”标签。这可能通过XSLT?
输入
<customer>
<marketReference>
<marketHierarchyLevels>
<marketHierarchyLevel>
<marketName>NATIONAL</marketName>
<level>0</level>
<marketId>1</marketId>
</marketHierarchyLevel>
<marketHierarchyLevel>
<marketName>WEST DIVISION</marketName>
<level>1</level>
<marketId>8211</marketId>
</marketHierarchyLevel>
</marketHierarchyLevels>
</marketReference>
<archiveReference>
<archiveLevels>
<archiveLevel>
<marketName>NATIONAL</marketName>
<level>0</level>
<marketId>1</marketId>
</archiveLevel>
<archiveLevel>
<marketName>WEST DIVISION</marketName>
<level>1</level>
<marketId>8211</marketId>
</archiveLevel>
</archiveLevels>
</archiveReference>
</customer>
期望输出
<customer>
<marketReference>
<marketHierarchyLevels>
<marketName>NATIONAL</marketName>
<level>0</level>
<marketId>1</marketId>
</marketHierarchyLevels>
<marketHierarchyLevels>
<marketName>WEST DIVISION</marketName>
<level>1</level>
<marketId>8211</marketId>
</marketHierarchyLevels>
</marketReference>
<archiveReference>
<archiveLevels>
<marketName>NATIONAL</marketName>
<level>0</level>
<marketId>1</marketId>
</archiveLevels>
<archiveLevels>
<marketName>WEST DIVISION</marketName>
<level>1</level>
<marketId>8211</marketId>
</archiveLevels>
</archiveReference>
</customer>
最新XSLT
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:m="http://xml.comcast.com/saleschannelmanagement/services"
xmlns:typ="http://xml.comcast.com/saleschannelmanagement/types">
<xsl:output method="xml" indent="yes" />
<xsl:strip-space elements="*"/>
<xsl:template match="*">
<xsl:element name="{local-name()}">
<xsl:apply-templates/>
</xsl:element>
</xsl:template>
<xsl:template match="*[name() = concat(name(*), 's')]">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="*[concat(name(), 's') = name(..)]">
<xsl:element name="{name()}s">
<xsl:apply-templates/>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
非常感谢Michael。我会检查一下。 –
@PunterVicky重读后,我可能误解了你的问题。以上将删除*名称以“s”结尾的任何*包装元素。你是不是想限制这个名字是他们孩子的复数形式的元素?如果是的话,你应该把''改成''注意这只看第一个孩子的名字。 –
谢谢迈克。是的,我只想限制它只包含除s之外完全相同的父子元素。家长应该有孩子,不应该有孩子。对不起,我现在稍微修改了我的预期输出,因为我忽略了它。删除父元素后,所有子元素都必须用s重命名。 –