我们想从
中的element xsl-sort<?xml version="1.0"?>
<General><CommlCoverage>
<Audit>
<AuditMtc>
<Term>
<From>2013-07-05</From>
<To>2014-06-02</To>
</Term>
</AuditMtc>
</Audit>
<Supplement>
<Audit>
<AuditMtc>
<Term>
<From>2013-07-02</From>
<To>2014-06-02</To>
</Term>
</AuditMtc>
</Audit>
</Supplement>
<Supplement>
<Audit>
<AuditMtc>
<Term>
<From>2013-01-02</From>
<To>2014-06-02</To>
</Term>
</AuditMtc>
</Audit>
</Supplement>
</CommlCoverage>
<CommlCoverage>
<Audit>
<AuditMtc><Term><From>2013-07-05</From><To>2014-06-02</To></Term></AuditMtc></Audit>
<Supplement><Audit><AuditMtc><Term><From>2013-07-02</From><To>2014-06-02</To></Term></AuditMtc></Audit></Supplement>
</CommlCoverage></General>
需要根据日期进行分类我的代码:
<xsl:for-each select="CommlCoverage">
<xsl:sort select="From"/>
<xsl:for-each select="Audit">
<xsl:value-of select="AuditMtc/Term/From"/>
</xsl:for-each>
<xsl:for-each select="Supplement/Audit">
<xsl:value-of select="AuditMtc/Term/From"/>
</xsl:for-each>
</xsl:for-each>
We have update the desired output:
[2013-01-02 To 2014-06-02]
[2013-01-02 To 2014-06-02]
[2013-07-02 To 2014-06-02] [2013-07-02 To 2014-06-02] [2013-07-05 To 2014-06-02] [2013-07-05 To 2014-06-02]
您可能会通过拥有一个模板来匹配root元素
开始<xsl:template match="/*">
在此中,您只需要按照的顺序从日期中选择术语,可能是在不同的级别。(这是从 element的 element始终是术语
的直接孩子 <xsl:apply-templates select=".//Term">
<xsl:sort select="From" />
</xsl:apply-templates>
请注意,语法.//Term
将在当前节点下方的层次结构中的任何级别上搜索 term 元素。
然后,您只需要一个模板即可匹配 term 元素,然后从>和> to 值中输出,例如SO
<xsl:template match="Term">
[<xsl:value-of select="From"/> to <xsl:value-of select="To" />]
</xsl:template>
尝试此XSLT
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" />
<xsl:template match="/*">
<xsl:apply-templates select=".//Term">
<xsl:sort select="From" />
</xsl:apply-templates>
</xsl:template>
<xsl:template match="Term">
[<xsl:value-of select="From"/> to <xsl:value-of select="To" />]
</xsl:template>
</xsl:stylesheet>
这将输出以下内容:
[2013-01-02 to 2014-06-02]
[2013-07-02 to 2014-06-02]
[2013-07-02 to 2014-06-02]
[2013-07-05 to 2014-06-02]
[2013-07-05 to 2014-06-02]
(这与您的预期输出不完全匹配,因为您的预期输出显示了六个次数,但输入中只有五个)。
不确定我对要求是否正确,但是,这是以下代码所做的:基于任何//term/from torn inter -term/term/term/term/term/term term/term/pers/term/pers/pers/pers/pers/pers/pers/pers/p>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >
<xsl:output method="text" indent="yes"/>
<xsl:template match="/General">
<xsl:for-each select="CommlCoverage">
<xsl:sort>
<xsl:for-each select="current()//Term/From">
<xsl:sort select="."/>
<xsl:if test="position() = 1">
<xsl:value-of select="."/>
</xsl:if>
</xsl:for-each>
</xsl:sort>
<xsl:apply-templates select="Audit | Supplement/Audit">
<xsl:sort select="AuditMtc/Term/From"/>
</xsl:apply-templates>
<xsl:text>
</xsl:text>
</xsl:for-each>
</xsl:template>
<xsl:template match="Audit">
<xsl:value-of select="concat('[', AuditMtc/Term/From, ' To ', AuditMtc/Term/To, ']')"/>
</xsl:template>
</xsl:stylesheet>