如何将XML变量传入XSLT模板进行节点排序与移除处理
解决方法
直接通过<xsl:apply-templates>将变量中的XML节点传入模板即可——document()加载的XML在变量中是XDM节点集,可直接作为模板的处理目标。
整合后的完整代码示例
<!-- 已有XML变量定义 --> <xsl:variable name="BANES_326" select="document('FHRS_BANES_326.xml')"/> <!-- 保留你的基础转换模板:递归复制节点+子节点排序 --> <xsl:template match="@*|node()"> <xsl:copy> <xsl:apply-templates select="@*|node()"> <xsl:sort select="RatingDate" order="descending"/> </xsl:apply-templates> </xsl:copy> </xsl:template> <!-- 保留移除指定节点的模板 --> <xsl:template match="ChangesByServerID|Distance|NewRatingPending"/> <!-- 在需要输出处理结果的位置调用模板 --> <xsl:template match="/"> <!-- 直接对变量中的XML文档应用模板 --> <xsl:apply-templates select="$BANES_326"/> </xsl:template>
关键说明
- 若只需处理变量中XML的特定部分,可调整
select的路径,比如$BANES_326/YourRootElement,精准定位到目标节点。 - 原模板的排序逻辑仅对当前节点的直接子节点按
RatingDate降序排列,若需对更深层级节点排序,需调整模板匹配规则或xsl:sort的作用范围。
内容的提问来源于stack exchange,提问作者DaveF
相关产品推荐
相关产品推荐

