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重命名。 –