抓住第一次出现的重复字段 - XSLT

时间:2014-01-16 15:01:43

标签: xml xslt

我有一个重复相同信息的xml文件,并希望使用xslt来获取第一个实例并忽略其余部分。以下是XML文件的样子:

<?xml version='1.0' encoding='UTF-8'?>
<Report_Data>
    <Report_Entry>
        <Cust_Name>Test 1</Cust_Name>
        <Cust_ID>Cust_ID_1</Cust_ID>
    </Report_Entry>
    <Report_Entry>
        <Cust_Name>Test 1</Cust_Name>
        <Cust_ID>Cust_ID_2</Cust_ID>
    </Report_Entry>
    <Report_Entry>
        <Cust_Name>Test 1</Cust_Name>
        <Cust_ID>Cust_ID_3</Cust_ID>
    </Report_Entry>
</Report_Data>

如果您想知道为什么会有重复的条目,那是因为数据库中有重复的条目,而xml文件会抓取所有这些条目。

在我的xslt:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0"   xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:xs="http://www.w3.org/2001/XMLSchema"     
    xmlns:fn="http://www.w3.org/2005/xpath-functions"
    exclude-result-prefixes="fn wd xs xsl">
    <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
    <xsl:template match="/">
    <root>
        <output_id>
            <xsl:value-of select="/Report_Data/Report_Entry/Cust_ID"></xsl:value-of>
        </output_id>
    </root>
    </xsl:template>
</xsl:stylesheet>

结果是:

<?xml version="1.0" encoding="UTF-8"?>
<root>
   <output_id>Cust_ID_1 Cust_ID_2 Cust_ID_3</output_id>
</root>

我想知道是否有一个函数可以抓住它遇到的第一个元素值,如<xsl:value-of select="/Report_Data/Report_Entry/Cust_ID[0]"></xsl:value-of>

我总是可以在使用空格作为分隔符的方法之前使用子字符串,但我想知道是否有更好的方法。

1 个答案:

答案 0 :(得分:1)

尝试更改此部分:

<output_id>
    <xsl:value-of select="/Report_Data/Report_Entry/Cust_ID"></xsl:value-of>
</output_id>

为:

<output_id>
    <xsl:value-of select="/Report_Data/Report_Entry[1]/Cust_ID" />
</output_id>

对于协议,我们在此假设报告只包含一个“真实”条目。

相关问题