You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 00:54:03