请求提供XSLT映射:将XSD指定simpleType和element的name转为大写
XSD指定节点name属性转大写的XSLT方案
核心思路
用XSLT的身份转换模板默认复制所有节点和属性,只针对目标节点(simpleType、element)且name属性属于你指定的字段列表时,把name值转成大写,其他内容保持原样。
完整XSLT代码
<?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema"> <!-- 默认复制所有节点、属性和文本 --> <xsl:template match="@*|node()"> <xsl:copy> <xsl:apply-templates select="@*|node()"/> </xsl:copy> </xsl:template> <!-- 匹配element的name属性,仅指定字段转大写 --> <xsl:template match="xs:element/@name[. = ('userid', 'username', 'email')]"> <xsl:attribute name="name"> <xsl:value-of select="upper-case(.)"/> </xsl:attribute> </xsl:template> <!-- 匹配simpleType的name属性,仅指定字段转大写 --> <xsl:template match="xs:simpleType/@name[. = ('userType', 'statusType')]"> <xsl:attribute name="name"> <xsl:value-of select="upper-case(.)"/> </xsl:attribute> </xsl:template> </xsl:stylesheet>
关键调整说明
- 字段列表修改:把代码中括号里的字段(比如
('userid', 'username'))替换成你需要转大写的具体name值。 - XSLT版本兼容:如果用XSLT 1.0,没有
upper-case()函数,把upper-case(.)换成translate(., 'abcdefghijklmnopqrstuvwxyz', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')。 - 命名空间匹配:如果你的XSD没有用
xs前缀,把xs:element、xs:simpleType改成element、simpleType即可。
示例效果
输入XSD片段
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:simpleType name="userType"> <xs:restriction base="xs:string"/> </xs:simpleType> <xs:element name="userid" type="xs:int"/> <xs:element name="address" type="xs:string"/> </xs:schema>
输出XSD片段
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:simpleType name="USERTYPE"> <xs:restriction base="xs:string"/> </xs:simpleType> <xs:element name="USERID" type="xs:int"/> <xs:element name="address" type="xs:string"/> </xs:schema>
内容的提问来源于stack exchange,提问作者mabt
相关产品推荐
相关产品推荐

