我有一个 XML 文件。我应该从 field3 中找到相同的 field2 开始(最小)日期和结束(最大)日期。也许 xsl 有一些函数可以找到它。因为我尝试这样做,试图找到最小月份、最小日期和最大月份、最大日期。 XML:
<document>
<line id="0">
<field id="2">X111</field>
<field id="3">2011-03-31</field>
</line>
<line id="1">
<field id="2">X111</field>
<field id="3">2011-04-04</field>
</line>
<line id="2">
<field id="2">X111</field>
<field id="3">2011-04-02</field>
</line>
<line id="3">
<field id="2">X222</field>
<field id="3">2011-04-04</field>
</line>
<line id="4">
<field id="2">X222</field>
<field id="3">2011-04-01</field>
</line>
<line id="4">
<field id="2">X333</field>
<field id="3">2011-04-01</field>
</line>
</document>
输出:
<document>
<Message>
<ID>X111</ID>
<dateStart>2011-03-31</dateStart>
<dateEnd>2011-04-04</dateEnd>
</Message>
<Message>
<ID>X222</ID>
<dateStart>2011-04-01</dateStart>
<dateEnd>2011-04-04</dateEnd>
</Message>
<Message>
<ID>X333</ID>
<dateStart>2011-04-01</dateStart>
<dateEnd>2011-04-01</dateEnd>
</Message>
</document>
请帮忙解决一下。我正在使用样式表版本=“1.0”。
最佳答案
这可能可以优化,但它会返回请求的结果:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes" omit-xml-declaration="yes"/>
<xsl:key name="test" match="line" use="field[@id=2]"/>
<xsl:template match="/">
<document>
<xsl:for-each select="//line[generate-id()=generate-id(key('test',field[@id=2]))]">
<xsl:sort select="field[@id=2]"/>
<Message>
<ID>
<xsl:value-of select="field[@id=2]"/>
</ID>
<xsl:apply-templates select="key('test',field[@id=2])">
<xsl:sort select="field[@id=3]"/>
</xsl:apply-templates>
</Message>
</xsl:for-each>
</document>
</xsl:template>
<xsl:template match="line">
<xsl:if test="position()=1">
<dateStart>
<xsl:value-of select="field[@id=3]"/>
</dateStart>
</xsl:if>
<xsl:if test="position()=last()">
<dateEnd>
<xsl:value-of select="field[@id=3]"/>
</dateEnd>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
关于xslt - 如何在 xml 文件中查找开始(最小)和结束(最大)日期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5632028/