XSLT转换含双竖线特殊字符属性的XML后HTML输出异常如何解决
问题根源
||是XPath 2.0及以上版本的内置字符串拼接运算符,若你的XSLT代码中存在将name属性的字符串内容当作XPath表达式动态执行的逻辑,||会被识别为运算符而非普通字符,导致表达式解析异常,无法正常读取name和value的属性值。
解决方案
- 方案1:停止动态解析属性值为XPath表达式
若你的代码中使用了dyn:evaluate、saxon:evaluate这类动态执行表达式的函数读取name属性,直接改为读取属性的原生文本值即可,无需做额外解析:
输出时直接引用这两个变量就能正常展示<!-- 错误写法:将name属性值当作表达式解析,遇到||会触发语法错误 --> <xsl:variable name="attrName" select="saxon:evaluate(@name)"/> <!-- 正确写法:直接取属性的文本内容,所有特殊字符都会原样保留 --> <xsl:variable name="attrName" select="string(@name)"/> <xsl:variable name="attrValue" select="string(@value)"/>RDXXX||LOWER_DECK和对应的10mm取值。 - 方案2:若必须保留动态解析逻辑,给属性值包裹单引号转义
如果业务逻辑需要动态执行表达式,可以在构造表达式时给整个name属性值用单引号包裹,强制XPath将其识别为字符串常量:<xsl:variable name="nameExpr" select="concat('''', @name, '''')"/> <xsl:variable name="attrName" select="saxon:evaluate($nameExpr)"/> - 方案3:检查并删除针对竖线的过滤分割规则
部分自定义XSLT模板会把|作为分隔符切割属性名,排查代码中是否存在这类逻辑,删除针对|字符的处理规则即可。
内容的提问来源于stack exchange,提问作者galme
相关产品推荐
相关产品推荐

