Я бы хотел отсортировать все разделы по периодам (месяц, день, неделя, год ...). Сомме раздел имеют тот же период. я не понимаю, как добавить различия года и месяца
У меня есть XML данные, такие как:
<?xml version='1.0' encoding='UTF-8'?>
<chapter>
<title>Title of chapter </title>
<section>
<title> Title of section 2</title>
<para>Period is 2 year </para>
</section>
<section>
<title> Title of section 1</title>
<para>Period is 1 year </para>
</section>
<section>
<title> Title of section 3</title>
<para>Period is 1 week </para>
</section>
<section>
<title> Title of section 4</title>
<para>Period is 1 year </para>
</section>
</chapter>
И мне нужен результат, как:
<?xml version='1.0' encoding='UTF-8'?>
<chapter>
<title>Title of chapter </title>
<section>
<title> List elem of 1 week</title>
<section>
<title> Title of section 3</title>
<para>Period is 1 week </para>
</section>
</section>
<section>
<title> List elem of 1 year</title>
<section>
<title> Title of section 1</title>
<para>Period is 1 year </para>
</section>
<section>
<title> Title of section 4</title>
<para>Period is 1 year </para>
</section>
</section>
<section>
<title> List elem of 2 years </title>
<section>
<title> Title of section 2</title>
<para>Period is 2 years </para>
</section>
</section>
</chapter>
И мой XSLT выглядит так:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >
<xsl:strip-space elements="*"/>
<xsl:template match="node( ) | @*">
<xsl:copy>
<xsl:apply-templates select="@* | node( )"/>
</xsl:copy>
</xsl:template>
<xsl:variable name="liste_valeurs" select="//para[not(. = preceding::para)]"/>
<xsl:template match="chapter">
<xsl:copy>
<xsl:copy-of select="@*"/>
<xsl:for-each select="$liste_valeurs">
<xsl:sort select="." data-type="number"/>
<xsl:variable name="valeur" select="."/>
<xsl:element name="section">
<title> List elem of <xsl:value-of select="$valeur"/></title>
<xsl:apply-templates select="//para[.=$valeur]">
<xsl:call-template name="copie_identique"/>
</xsl:apply-templates>
</xsl:element>
</xsl:for-each>
</xsl:copy>
</xsl:template>
<xsl:template name="copie_identique">
<xsl:copy>
<xsl:copy-of select="@*"/>
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
И я не получаю ожидаемого результата, я довольно новичок в XSLT и простите меня, если ответ уже существует, я искал, но я Я немного растерялся, и я не знаю точно, что искать.
Я не знаю, где go, и, возможно, метод не лучший способ достичь того, чего я хочу.
Спасибо за любую помощь, которую вы можете оказать,