XSLT如何为重复JournalLine节点下的每个Quantity元素值加10
问题排查与修正方案
现有代码错误点
- XSLT命名空间不完整:
xsl命名空间缺少http://前缀,属于语法错误 - 全局路径误用:
//Quantity是从文档根节点匹配所有Quantity元素,默认返回匹配到的第一个节点的值,导致所有Quantity输出值一致 - 缺少加10的逻辑:当前代码仅做了格式化,没有执行值+10的核心操作
- 版本声明不匹配:你使用的是XSLT 2.0,代码里声明的是1.0版本
修正后代码
<?xml version="1.0" encoding="utf-8"?> <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="xml" version="1.0" encoding="utf-8" omit-xml-declaration="no" indent="yes" /> <!-- 身份模板:复制所有节点和属性不变 --> <xsl:template match="node()|@*"> <xsl:copy> <xsl:apply-templates select="node()|@*"/> </xsl:copy> </xsl:template> <!-- 单独处理Quantity的文本节点 --> <xsl:template match="Quantity/text()"> <!-- 当前节点值转数字加10,按需求格式化 --> <xsl:value-of select = "format-number(. + 10, '###,###')"/> </xsl:template> <xsl:template match="Filename"></xsl:template> </xsl:stylesheet>
代码说明
.代表当前匹配的Quantity文本节点,只会读取当前节点的值做运算,不会出现所有值重复的问题- 新增了
+ 10的运算逻辑,满足数值调整需求 - 格式化模板去掉了
.00后缀,和你给出的预期输出格式匹配,如果需要保留两位小数可以改回'###,###.00'
内容的提问来源于stack exchange,提问作者Paul Mckeown
相关产品推荐
相关产品推荐

