xslt2.0 使用应用模板排序不起作用
xslt2.0 Sorting with apply templates not working
我在这里看到了几个关于如何使用 xslt 2.0 对 xml 的一部分进行排序(重新排序)的示例
但是我似乎无法让它工作。
示例输入文件:
<example>
<field1>1</field1>
<field2>2</field2>
<fileheader>
<headerfield1>1</headerfield1>
<headerfield2>2</headerfield2>
<headerfield3>3</headerfield3>
<consol>
<consolfield1>1</consolfield1>
<consolfield2>2</consolfield2>
<file>
<filefield1>1</filefield1>
<filefield2>2</filefield2>
<filefield3>3</filefield3>
<filefield4>4</filefield4>
<bespokehook>
<code>code</code>
<value>50</value>
</bespokehook>
</file>
</consol>
<consol>
<consolfield1>1</consolfield1>
<consolfield2>2</consolfield2>
<file>
<filefield1>1</filefield1>
<filefield2>2</filefield2>
<filefield3>3</filefield3>
<filefield4>4</filefield4>
<bespokehook>
<code>code</code>
<value>20</value>
</bespokehook>
</file>
</consol>
<consol>
<consolfield1>1</consolfield1>
<consolfield2>2</consolfield2>
<file>
<filefield1>1</filefield1>
<filefield2>2</filefield2>
<filefield3>3</filefield3>
<filefield4>4</filefield4>
<bespokehook>
<code>code</code>
<value>40</value>
</bespokehook>
</file>
</consol>
</fileheader>
我想要的是根据
中的值重新排序完整的 consol 段
<bespokehook>
<code>code</code>
<value>20</value>
</bespokehook>
我似乎无法正常工作。
我使用了本网站和其他网站的几个示例,但没有成功。
谁能告诉我如何实现这个
Tnx
样式表
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="xs">
<xsl:output indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()" />
</xsl:copy>
</xsl:template>
<xsl:template match="fileheader">
<xsl:copy>
<xsl:apply-templates select="* except consol"/>
<xsl:apply-templates select="consol">
<xsl:sort select="xs:decimal(file/bespokehook/value)"/>
</xsl:apply-templates>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
转换输入
<example>
<field1>1</field1>
<field2>2</field2>
<fileheader>
<headerfield1>1</headerfield1>
<headerfield2>2</headerfield2>
<headerfield3>3</headerfield3>
<consol>
<consolfield1>1</consolfield1>
<consolfield2>2</consolfield2>
<file>
<filefield1>1</filefield1>
<filefield2>2</filefield2>
<filefield3>3</filefield3>
<filefield4>4</filefield4>
<bespokehook>
<code>code</code>
<value>50</value>
</bespokehook>
</file>
</consol>
<consol>
<consolfield1>1</consolfield1>
<consolfield2>2</consolfield2>
<file>
<filefield1>1</filefield1>
<filefield2>2</filefield2>
<filefield3>3</filefield3>
<filefield4>4</filefield4>
<bespokehook>
<code>code</code>
<value>20</value>
</bespokehook>
</file>
</consol>
<consol>
<consolfield1>1</consolfield1>
<consolfield2>2</consolfield2>
<file>
<filefield1>1</filefield1>
<filefield2>2</filefield2>
<filefield3>3</filefield3>
<filefield4>4</filefield4>
<bespokehook>
<code>code</code>
<value>40</value>
</bespokehook>
</file>
</consol>
</fileheader>
</example>
进入结果
<example>
<field1>1</field1>
<field2>2</field2>
<fileheader>
<headerfield1>1</headerfield1>
<headerfield2>2</headerfield2>
<headerfield3>3</headerfield3>
<consol>
<consolfield1>1</consolfield1>
<consolfield2>2</consolfield2>
<file>
<filefield1>1</filefield1>
<filefield2>2</filefield2>
<filefield3>3</filefield3>
<filefield4>4</filefield4>
<bespokehook>
<code>code</code>
<value>20</value>
</bespokehook>
</file>
</consol>
<consol>
<consolfield1>1</consolfield1>
<consolfield2>2</consolfield2>
<file>
<filefield1>1</filefield1>
<filefield2>2</filefield2>
<filefield3>3</filefield3>
<filefield4>4</filefield4>
<bespokehook>
<code>code</code>
<value>40</value>
</bespokehook>
</file>
</consol>
<consol>
<consolfield1>1</consolfield1>
<consolfield2>2</consolfield2>
<file>
<filefield1>1</filefield1>
<filefield2>2</filefield2>
<filefield3>3</filefield3>
<filefield4>4</filefield4>
<bespokehook>
<code>code</code>
<value>50</value>
</bespokehook>
</file>
</consol>
</fileheader>
</example>
我在这里看到了几个关于如何使用 xslt 2.0 对 xml 的一部分进行排序(重新排序)的示例 但是我似乎无法让它工作。
示例输入文件:
<example>
<field1>1</field1>
<field2>2</field2>
<fileheader>
<headerfield1>1</headerfield1>
<headerfield2>2</headerfield2>
<headerfield3>3</headerfield3>
<consol>
<consolfield1>1</consolfield1>
<consolfield2>2</consolfield2>
<file>
<filefield1>1</filefield1>
<filefield2>2</filefield2>
<filefield3>3</filefield3>
<filefield4>4</filefield4>
<bespokehook>
<code>code</code>
<value>50</value>
</bespokehook>
</file>
</consol>
<consol>
<consolfield1>1</consolfield1>
<consolfield2>2</consolfield2>
<file>
<filefield1>1</filefield1>
<filefield2>2</filefield2>
<filefield3>3</filefield3>
<filefield4>4</filefield4>
<bespokehook>
<code>code</code>
<value>20</value>
</bespokehook>
</file>
</consol>
<consol>
<consolfield1>1</consolfield1>
<consolfield2>2</consolfield2>
<file>
<filefield1>1</filefield1>
<filefield2>2</filefield2>
<filefield3>3</filefield3>
<filefield4>4</filefield4>
<bespokehook>
<code>code</code>
<value>40</value>
</bespokehook>
</file>
</consol>
</fileheader>
我想要的是根据
中的值重新排序完整的 consol 段 <bespokehook>
<code>code</code>
<value>20</value>
</bespokehook>
我似乎无法正常工作。 我使用了本网站和其他网站的几个示例,但没有成功。
谁能告诉我如何实现这个
Tnx
样式表
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="xs">
<xsl:output indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()" />
</xsl:copy>
</xsl:template>
<xsl:template match="fileheader">
<xsl:copy>
<xsl:apply-templates select="* except consol"/>
<xsl:apply-templates select="consol">
<xsl:sort select="xs:decimal(file/bespokehook/value)"/>
</xsl:apply-templates>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
转换输入
<example>
<field1>1</field1>
<field2>2</field2>
<fileheader>
<headerfield1>1</headerfield1>
<headerfield2>2</headerfield2>
<headerfield3>3</headerfield3>
<consol>
<consolfield1>1</consolfield1>
<consolfield2>2</consolfield2>
<file>
<filefield1>1</filefield1>
<filefield2>2</filefield2>
<filefield3>3</filefield3>
<filefield4>4</filefield4>
<bespokehook>
<code>code</code>
<value>50</value>
</bespokehook>
</file>
</consol>
<consol>
<consolfield1>1</consolfield1>
<consolfield2>2</consolfield2>
<file>
<filefield1>1</filefield1>
<filefield2>2</filefield2>
<filefield3>3</filefield3>
<filefield4>4</filefield4>
<bespokehook>
<code>code</code>
<value>20</value>
</bespokehook>
</file>
</consol>
<consol>
<consolfield1>1</consolfield1>
<consolfield2>2</consolfield2>
<file>
<filefield1>1</filefield1>
<filefield2>2</filefield2>
<filefield3>3</filefield3>
<filefield4>4</filefield4>
<bespokehook>
<code>code</code>
<value>40</value>
</bespokehook>
</file>
</consol>
</fileheader>
</example>
进入结果
<example>
<field1>1</field1>
<field2>2</field2>
<fileheader>
<headerfield1>1</headerfield1>
<headerfield2>2</headerfield2>
<headerfield3>3</headerfield3>
<consol>
<consolfield1>1</consolfield1>
<consolfield2>2</consolfield2>
<file>
<filefield1>1</filefield1>
<filefield2>2</filefield2>
<filefield3>3</filefield3>
<filefield4>4</filefield4>
<bespokehook>
<code>code</code>
<value>20</value>
</bespokehook>
</file>
</consol>
<consol>
<consolfield1>1</consolfield1>
<consolfield2>2</consolfield2>
<file>
<filefield1>1</filefield1>
<filefield2>2</filefield2>
<filefield3>3</filefield3>
<filefield4>4</filefield4>
<bespokehook>
<code>code</code>
<value>40</value>
</bespokehook>
</file>
</consol>
<consol>
<consolfield1>1</consolfield1>
<consolfield2>2</consolfield2>
<file>
<filefield1>1</filefield1>
<filefield2>2</filefield2>
<filefield3>3</filefield3>
<filefield4>4</filefield4>
<bespokehook>
<code>code</code>
<value>50</value>
</bespokehook>
</file>
</consol>
</fileheader>
</example>