XSL实现将指定节点文本值复制到子节点并命名为DocumentNumberCopy
问题描述
原始XML中,/XMLLandedCostOutput/AgentInvoiceCollection/AgentInvoice/DocumentNumber节点包含文本值(例如"JIN83776"),需将该值复制到每个/XMLLandedCostOutput/AgentInvoiceCollection/AgentInvoice/AgentInvoiceLineCollection/AgentInvoiceLine节点下,创建名为DocumentNumberCopy的子节点并赋予对应值。
当前使用的XSL代码能创建节点但无值,代码如下:
<DocumentNumberCopy><xls:value-of select=".DocumentNumber"/></DocumentNumbrCopy?
解决方案
基础语法修正
原代码存在3个关键错误,修正后即可正常取值:
- 命名空间前缀错误:将
xls:改为xsl:(符合XSLT标准命名空间前缀) - 结束标签拼写错误:修正为
</DocumentNumberCopy>,并移除末尾多余的问号 - 路径选择错误:在
AgentInvoiceLine节点上下文中,.DocumentNumber无法定位到上级的DocumentNumber,需使用ancestor::AgentInvoice/DocumentNumber精准遍历到父层级的目标节点
修正后的代码:
<DocumentNumberCopy> <xsl:value-of select="ancestor::AgentInvoice/DocumentNumber"/> </DocumentNumberCopy>
使用xsl:copy的实现方式
如果需要通过xsl:copy方法复制值,可以直接复制目标节点的文本内容:
<DocumentNumberCopy> <xsl:copy-of select="ancestor::AgentInvoice/DocumentNumber/text()"/> </DocumentNumberCopy>
这种方式直接复制DocumentNumber的文本节点,效果和xsl:value-of一致,适合需要保留节点文本原始格式的场景。
内容的提问来源于stack exchange,提问作者Johan
相关产品推荐
相关产品推荐

