我是堆栈溢出成员中的新成员,即使很久以来我经常使用它。
我正在尝试使用xslt文件将一些标签分类到xml文件中。
我的file.xml是:
<?xml version="1.0" encoding="UTF-8"?>
<nots>
<base_name>
<label>B_bn</label>
<functionality>
<label>B_f2</label>
<mails>z_user@domain.com</mails>
<mails>f_user@domain.com</mails>
<mails>a_user@domain.com</mails>
</functionality>
<functionality>
<label>A_f1</label>
<mails></mails>
</functionality>
<functionality>
<label>C_f3</label>
<mails>x_user@domain.com</mails>
<mails>a_user@domain.com</mails>
</functionality>
</base_name>
<base_name>
<label>A_bn</label>
<functionality>
<label>C_f3</label>
<mails></mails>
</functionality>
<functionality>
<label>A_f1</label>
<mails></mails>
</functionality>
<functionality>
<label>B_f2</label>
<mails></mails>
</functionality>
</base_name>
</nots>
我想在输出中获得一个新的file.xml,其中对标签“ base_name”,“功能”和“邮件”进行了排序。
使用以下xslt:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:ns="urn:TestNamespace">
<xsl:output method="xml" indent="yes" omit-xml-declaration="no" />
<xsl:strip-space elements="*"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="base_name">
<xsl:copy>
<xsl:apply-templates select="label" />
<xsl:apply-templates select="functionality">
<xsl:sort select="label" />
</xsl:apply-templates>
</xsl:copy>
</xsl:template>
<xsl:template match="nots">
<xsl:copy>
<xsl:apply-templates select="base_name">
<xsl:sort select="label" />
</xsl:apply-templates>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
我能够对标签“ base_name”和“ funzionality”进行排序,但是由于我是xslt的新手,所以我也不知道如何对邮件标签进行排序。
请,有人可以告诉我如何解决吗?预先感谢您的支持! ;)
答案 0 :(得分:0)
您只需要添加以下模板即可按其子文本节点对mails
进行排序。
<xsl:template match="functionality">
<xsl:copy>
<xsl:apply-templates select="label" />
<xsl:apply-templates select="mails">
<xsl:sort select="text()" />
</xsl:apply-templates>
</xsl:copy>
</xsl:template>
或者您可以这样做。...
<xsl:template match="functionality">
<xsl:copy>
<xsl:apply-templates select="label" />
<xsl:apply-templates select="mails">
<xsl:sort select="." />
</xsl:apply-templates>
</xsl:copy>
</xsl:template>
此处.
代表当前节点(即选择进行排序的mails
节点)。由于您的mails
节点只有一个文本节点,因此当前节点的值就是那个。