向XSLT参数传入XML无法正常解析,如何提取指定key的属性值?
XSLT传入XML参数解析失败解决方案
原因定位
parse-xml()函数仅支持字符串类型的合法XML内容作为输入,解析失败基本是参数类型不匹配或者XML内容被异常转义导致的。
分步解决
- 情况1:参数
$items是直接传入的XML节点树
很多场景下调用方会直接把解析好的XML节点树作为参数传入,这种情况不需要调用parse-xml(),直接通过路径读取即可:$items/map/entry[@key = '25812926'] - 情况2:参数
$items确实是XML字符串- 先验证字符串合法性,避免XML里的
<、"等特殊符号被提前转义成<、"这类HTML实体,你给出的示例XML本身格式合法,无需修改。 - 确认参数类型是字符串,可添加调试语句校验:
<!-- 输出参数内容确认无异常 --> <xsl:value-of select="$items" /> <!-- 输出true则为字符串类型 --> <xsl:value-of select="$items instance of xs:string" />- 验证通过后用原XPath即可提取到对应值,如需拿取值文本可加
text():
parse-xml($items)/map/entry[@key = '25812926']/text() - 先验证字符串合法性,避免XML里的
宿主语言传参注意事项
如果是在Java、C#等语言中调用XSLT处理器传参:
- 传节点树时直接传入DOM对象,不要转成字符串
- 传字符串时确保XML内容未被框架自动转义,编码和XML声明一致
内容的提问来源于stack exchange,提问作者ShwetaB
相关产品推荐
相关产品推荐

