我的源XML文件如下所示:
<DocumentList>
<Document>
<ID>123</ID>
<SubID></SubID>
</Document>
<Document>
<ID>123</ID>
<SubID>1</SubID>
</Document>
<Document>
<ID>124</ID>
<SubID></SubID>
</Document>
<Document>
<ID>124</ID>
<SubID>2<SubID>
</Document>
<Document>
<ID>125</ID>
<SubID>1<SubID>
</Document>
</DocumentList>
从那个XML文件我想创建新的XML文件,它将跳过XML文件中存在另一个兄弟元素的元素的第一个条目。我的输出XML文件是这样的:
<DocumentList>
<Document>
<ID>123</ID>
<SubID>1</SubID>
</Document>
<Document>
<ID>124</ID>
<SubID>2<SubID>
</Document>
<Document>
<ID>125</ID>
<SubID>1<SubID>
</Document>
</DocumentList>
过去几个小时我一直试图解决这个问题。请分享一些想法。
答案 0 :(得分:2)
使用XSLT 2.0
<xsl:template match="DocumentList">
<xsl:copy>
<xsl:for-each-group select="Document" group-adjacent="ID">
<xsl:copy-of select="current-group()[last()]"/>
</xsl:for-each-group>
</xsl:copy>
</xsl:template>
答案 1 :(得分:2)
使用XSLT 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"/>
<xsl:template match="DocumentList">
<xsl:copy>
<xsl:apply-templates select="Document"/>
</xsl:copy>
</xsl:template>
<xsl:template match="Document">
<xsl:choose>
<xsl:when test="ID = following-sibling::Document/ID"></xsl:when>
<xsl:otherwise>
<xsl:copy>
<xsl:copy-of select="."/>
</xsl:copy>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>