使用<xsl:copy-of select="node()"/>无法复制节点及其子节点问题咨询
问题核心原因
- 你定义了两个匹配根节点
/的模板,XSLT处理器只会调用最后一个,但该模板的apply-templates选择逻辑没有主动触发Charges相关节点的处理 - 你已实现的
Inmate_Data转换模板没有主动调用Charges_Data的匹配模板,导致Charges节点被遗漏 - 根节点模板中多余的
<xsl:copy>会保留原根节点结构,和你期望的输出结构不符
修复方案
- 删除重复的根节点匹配模板,统一根节点处理逻辑
- 明确指定同时处理
Inmate_Data和Charges_Data两个节点,避免遗漏 - 直接主动拉取所有
charge节点原样复制,不需要额外写Charges_Data的匹配模板,降低模板触发逻辑出错概率
修正后完整XSLT代码
<?xml version='1.0'?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <!-- 唯一根节点处理模板 --> <xsl:template match="/"> <booking> <inmateData> <!-- 调用你已经写好的Inmate_Data字段转换逻辑 --> <xsl:apply-templates select="Active_Booking_Release_Report/Inmate_Data/*"/> <!-- 直接原样复制所有charge节点到目标位置 --> <xsl:copy-of select="Active_Booking_Release_Report/Charges_Data/charge"/> </inmateData> </booking> </xsl:template> <!-- 这里保留你原来写的所有Inmate_Data字段转换的模板即可 --> </xsl:stylesheet>
内容的提问来源于stack exchange,提问作者Josh Montgomery
相关产品推荐
相关产品推荐

