要转换的 XSLT XML:选择 uuid 并按顺序排序
XSLT to transform XML: selecting uuids and sorting in order
##
我有一个很大的 xml 文件,其中有多个 uuid 分组在不同的元素下。我希望它们在每个组中进行排序。有人可以请 post 他们对此有想法吗。------------
这是用来格式化的 xslt 文件
预期输出:对文件中的所有 uid 进行排序
如果要对 uuid
元素进行排序,则必须从其父 uuids
元素的上下文中对它们应用排序指令 - 而不是不存在的 test
元素来自不存在的 table
元素的上下文。
此外,UUID 不是数字,将它们作为数字排序是没有意义的。事实上,根本不清楚对它们进行排序有什么意义,因为根据定义,它们是无意义的。不过,如果你愿意,你可以这样做:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>
<!-- identity transform -->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="uuids">
<xsl:copy>
<xsl:apply-templates select="uuid">
<xsl:sort select="."/>
</xsl:apply-templates>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
您可以通过以下方式实现:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="2.0">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<!-- If the uuid elements are not always in a uuids element, can replace with *[uuid] -->
<xsl:template match="uuids">
<xsl:copy>
<xsl:for-each select="uuid">
<xsl:sort select="." data-type="text" order="ascending"/>
<xsl:copy-of select="."/>
</xsl:for-each>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
这是工作正常的 .xslt 模板
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>
<!-- identity transform -->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="uuids">
<xsl:copy>
<xsl:apply-templates select="uuid">
<xsl:sort select="."/>
</xsl:apply-templates>
</xsl:copy>
</xsl:template>
<xsl:template match="history">
<xsl:copy>
<xsl:apply-templates select="historyInfo">
<xsl:sort select="@versionUuid"/>
</xsl:apply-templates>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
##
我有一个很大的 xml 文件,其中有多个 uuid 分组在不同的元素下。我希望它们在每个组中进行排序。有人可以请 post 他们对此有想法吗。------------
这是用来格式化的 xslt 文件
预期输出:对文件中的所有 uid 进行排序
如果要对 uuid
元素进行排序,则必须从其父 uuids
元素的上下文中对它们应用排序指令 - 而不是不存在的 test
元素来自不存在的 table
元素的上下文。
此外,UUID 不是数字,将它们作为数字排序是没有意义的。事实上,根本不清楚对它们进行排序有什么意义,因为根据定义,它们是无意义的。不过,如果你愿意,你可以这样做:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>
<!-- identity transform -->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="uuids">
<xsl:copy>
<xsl:apply-templates select="uuid">
<xsl:sort select="."/>
</xsl:apply-templates>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
您可以通过以下方式实现:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="2.0">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<!-- If the uuid elements are not always in a uuids element, can replace with *[uuid] -->
<xsl:template match="uuids">
<xsl:copy>
<xsl:for-each select="uuid">
<xsl:sort select="." data-type="text" order="ascending"/>
<xsl:copy-of select="."/>
</xsl:for-each>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
这是工作正常的 .xslt 模板
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>
<!-- identity transform -->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="uuids">
<xsl:copy>
<xsl:apply-templates select="uuid">
<xsl:sort select="."/>
</xsl:apply-templates>
</xsl:copy>
</xsl:template>
<xsl:template match="history">
<xsl:copy>
<xsl:apply-templates select="historyInfo">
<xsl:sort select="@versionUuid"/>
</xsl:apply-templates>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>