【发布时间】:2014-08-28 01:51:59
【问题描述】:
我有一个 xml 文件,我需要将一个元素的值组合到一个元素中,并确保没有重复项。下面是输入的xml文件。
<AIRPORTSFILE>
<document name="SAMPLE1">
<DEPARTURE_AIRPORT>D1</DEPARTURE_AIRPORT>
<DEPARTURE_DATE>2014-03-15</DEPARTURE_DATE>
<DEPARTURE_TIME>0615</DEPARTURE_TIME>
<ARRIVAL_DATE>2014-03-14</ARRIVAL_DATE>
<ARRIVAL_TIME>0930</ARRIVAL_TIME>
<ARRIVAL_AIRPORT>A1</ARRIVAL_AIRPORT>
<DEPARTURE_AIRPORT>D2</DEPARTURE_AIRPORT>
<DEPARTURE_DATE>2014-03-14</DEPARTURE_DATE>
<DEPARTURE_TIME>0615</DEPARTURE_TIME>
<ARRIVAL_DATE>2014-03-15</ARRIVAL_DATE>
<ARRIVAL_TIME>0930</ARRIVAL_TIME>
<ARRIVAL_AIRPORT>A2</ARRIVAL_AIRPORT>
<DEPARTURE_AIRPORT>D2</DEPARTURE_AIRPORT>
<DEPARTURE_DATE>2014-03-15</DEPARTURE_DATE>
<DEPARTURE_TIME>0615</DEPARTURE_TIME>
<ARRIVAL_DATE>2014-03-15</ARRIVAL_DATE>
<ARRIVAL_TIME>0930</ARRIVAL_TIME>
<ARRIVAL_AIRPORT>A2</ARRIVAL_AIRPORT>
</document>
<document name="SAMPLE2">
<DEPARTURE_AIRPORT>2014-06-05</DEPARTURE_AIRPORT>
<DEPARTURE_DATE>2014-06-05</DEPARTURE_DATE>
<DEPARTURE_TIME>1815</DEPARTURE_TIME>
<ARRIVAL_DATE>2014-06-05</ARRIVAL_DATE>
<ARRIVAL_TIME>2130</ARRIVAL_TIME>
<ARRIVAL_AIRPORT>P1</ARRIVAL_AIRPORT>
<DEPARTURE_AIRPORT>2014-06-06</DEPARTURE_AIRPORT>
<DEPARTURE_DATE>2014-06-06</DEPARTURE_DATE>
<DEPARTURE_TIME>1815</DEPARTURE_TIME>
<ARRIVAL_DATE>2014-06-05</ARRIVAL_DATE>
<ARRIVAL_TIME>2130</ARRIVAL_TIME>
<ARRIVAL_AIRPORT>P1</ARRIVAL_AIRPORT>
</document>
</AIRPORTSFILE>
输出需要是:
<catalog>
<document name="SAMPLE1">
<departureDate>2014-03-15,2014-03-14</departureDate>
<arrivalAirport>A1,A2</arrivalAirport>
</document>
<document name="SAMPLE2">
<departureDate>2014-06-05,2014-06-06</departureDate>
<arrivalAirport>P1</arrivalAirport>
</document>
</catalog>
我查看了XSLT 1.0 - Remove Duplicate Nodes From Variable 和XSLT 1.0 - Remove duplicates fields 以供参考,但无法使其正常工作。
以下是我的 xsl 1.0 文件中的内容,以使 DEPARTURE_DATE 工作。
<xsl:key name="kDepartureDate" match="DEPARTURE_DATE" use="."/>
<xsl:template match="@* | node()" name="Copy">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="DEPARTURE_DATE[generate-id() =
generate-id(key('kDepartureDate', .)[1])]" name="depDateCopy">
<xsl:call-template name="Copy" />
</xsl:template>
<xsl:template match="AIRPORTSFILE">
<catalog>
<xsl:for-each select="document">
<xsl:variable name="departureDate">
<xsl:call-template name="depDateCopy"></xsl:call-template>
</xsl:variable>
</xsl:for-each>
</catalog>
</xsl:template>
任何帮助将不胜感激。
【问题讨论】:
-
关于您的 XSLT 代码最有趣的部分是在匹配
AIRPORTSFILE的模板中存在<catalog>元素。 -
catalog 是我想要在输出 XML 中的根元素。您能帮我删除重复项吗?
-
我想要目录。但这对不删除重复项的原因没有影响吗?
-
是什么让您认为它们没有被删除?
-
@michael.hor257k 这是我为一份文件得到的结果:
D1 2014-03-15 0615 2014-03-14 0930 A1 D2 2014 -03-14 0615 2014-03-15 0930 A2 D2 2014-03-15 0615 2014-03-15 0930 A2 ALC,ALC,PFO
标签: xml xslt duplicates xslt-1.0