我想获取 xml 标签的属性值,使用 XSLT 1.0 时该标签不区分大小写
i want to obtain a attribute's value of an xml tag, which would be case insensitive using XSLT 1.0
我想在 XSLT1.0 中获取不区分大小写的 xml 属性值,或者我们可以说忽略大小写标记,例如,如果我们有一个标记
<Name></Name> or
<name></name> or
<nAME></nAME> etc
在每个场景中,我们的 value-of select="name" 应该获取此值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>
预期结果:
Lufthansa-abc-def-Group-Lufthansa-abc-def-Group-Lufthansa-abc-def-Group-Lufthansa-abc-def-Group
试试这个
<xsl:for-each select="*[(translate(local-name(.), 'NAME', 'name')) = 'name']">
<xsl:value-of select="."/>
</xsl:for-each>
查看转换
当你从混乱开始时 XML 我的建议是始终进行两次操作:首先将其变为干净 XML,然后进行真正的处理。干净 XML 绝对不会在标签中使用混合大小写。
将所有内容转换为小写非常简单:
<xsl:template match="*">
<xsl:element name="lower-case(name())">
<xsl:apply-templates select="@*, node()"/>
</xsl:element>
</xsl:template>
<xsl:template match="@*">
<xsl:attribute name="lower-case(name())" select="."/>
</xsl:template>
两次通过方法的优点是第一阶段的代码是可重用的;无论后续处理是什么,您都可以将其放入您的处理管道中。
@Michael Kay
我试过了,但没有得到结果?
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:template match="*">
<xsl:element name="translate(name(), 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz')">
<xsl:apply-templates select="@*, node()" />
</xsl:element>
</xsl:template>
<xsl:template match="@*">
<xsl:attribute name="translate(name(), 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz')" select="." />
</xsl:template>
</xsl:stylesheet>
我想在 XSLT1.0 中获取不区分大小写的 xml 属性值,或者我们可以说忽略大小写标记,例如,如果我们有一个标记
<Name></Name> or
<name></name> or
<nAME></nAME> etc
在每个场景中,我们的 value-of select="name" 应该获取此值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>
预期结果: Lufthansa-abc-def-Group-Lufthansa-abc-def-Group-Lufthansa-abc-def-Group-Lufthansa-abc-def-Group
试试这个
<xsl:for-each select="*[(translate(local-name(.), 'NAME', 'name')) = 'name']">
<xsl:value-of select="."/>
</xsl:for-each>
查看转换
当你从混乱开始时 XML 我的建议是始终进行两次操作:首先将其变为干净 XML,然后进行真正的处理。干净 XML 绝对不会在标签中使用混合大小写。
将所有内容转换为小写非常简单:
<xsl:template match="*">
<xsl:element name="lower-case(name())">
<xsl:apply-templates select="@*, node()"/>
</xsl:element>
</xsl:template>
<xsl:template match="@*">
<xsl:attribute name="lower-case(name())" select="."/>
</xsl:template>
两次通过方法的优点是第一阶段的代码是可重用的;无论后续处理是什么,您都可以将其放入您的处理管道中。
@Michael Kay 我试过了,但没有得到结果?
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:template match="*">
<xsl:element name="translate(name(), 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz')">
<xsl:apply-templates select="@*, node()" />
</xsl:element>
</xsl:template>
<xsl:template match="@*">
<xsl:attribute name="translate(name(), 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz')" select="." />
</xsl:template>
</xsl:stylesheet>