我想根据孩子的名字对父节点 CommlCoverage 进行排序 来自标签



我们想从

中的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>

最新更新