如何在XSLT 1.0中不区分大小写获取XML元素内容
在XSLT 1.0中不区分大小写获取XML元素内容
XSLT 1.0对XML元素名称是大小写敏感的,直接用value-of select="name"只能精准匹配标签名为<name>的元素。要实现不区分大小写匹配任意大小写组合的<Name>、<nAme>等元素,我们可以借助translate()函数统一转换元素名的大小写后再进行匹配。
完整实现示例
输入XML
<?xml version="1.0" encoding="UTF-8"?> <CommandList> <Name>Lufthansa-abc-def-Group-</Name> <name>Lufthansa-abc-def-Group-</name> <nAme>Lufthansa-abc-def-Group-</nAme> <nAME>Lufthansa-abc-def-Group-</nAME> </CommandList>
XSLT 1.0代码
<?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="text" encoding="UTF-8"/> <xsl:template match="/CommandList"> <!-- 匹配所有名称转小写后等于'name'的元素,输出它们的文本内容 --> <xsl:value-of select="*[translate(local-name(), 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz') = 'name']" /> </xsl:template> </xsl:stylesheet>
输出结果
Lufthansa-abc-def-Group-Lufthansa-abc-def-Group-Lufthansa-abc-def-Group-Lufthansa-abc-def-Group
原理说明
local-name():获取当前元素的本地名称(不包含命名空间前缀)translate():将元素名中的所有大写字母转换为小写,这样不管原元素名是<Name>、<nAme>还是其他大小写组合,都会被转为name,从而和目标字符串匹配*[条件]:选择所有满足条件的子元素,value-of会自动将多个元素的文本内容拼接输出
内容的提问来源于stack exchange,提问作者Sadik Siddiqui
相关产品推荐
相关产品推荐

