XML校验报错:如何在XSD中为自定义元素启用xml:lang属性?
解决xml:lang属性校验报错的方法
问题原因
xml:lang是XML内置http://www.w3.org/XML/1998/namespace命名空间下的属性,默认XSD不会自动允许自定义元素使用该属性,必须在XSD中显式声明授权。
具体修改步骤
- 调整test.xsd文件
找到mystring元素的定义,通过扩展类型的方式添加对xml:lang属性的引用:
<?xml version="1.0" encoding="utf-8"?> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xml="http://www.w3.org/XML/1998/namespace"> <!-- 保留原有其他元素定义 --> <xsd:element name="mystring"> <xsd:complexType> <xsd:simpleContent> <xsd:extension base="xsd:string"> <!-- 声明允许使用xml:lang属性,use="optional"表示属性可选 --> <xsd:attribute ref="xml:lang" use="optional"/> </xsd:extension> </xsd:simpleContent> </xsd:complexType> </xsd:element> <!-- 保留原有其他元素定义 --> </xsd:schema>
如果mystring原本就是复杂类型(包含其他属性或子元素),只需在其complexType节点内直接添加<xsd:attribute ref="xml:lang" use="optional"/>即可。
- 简化XML文件(可选)
XML里的xmlns:xml="http://www.w3.org/XML/1998/namespace"声明是多余的——xml前缀是XML标准默认绑定到该命名空间的,删除后不影响功能:
<?xml version="1.0" encoding="utf-8" ?> <root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="test.xsd"> <myname> <description> <mystring xml:lang="en"></mystring> <mystring xml:lang="fr"></mystring> </description> </myname> </root>
验证
修改完成后重新校验XML,xml:lang属性的报错即可消除。
内容的提问来源于stack exchange,提问作者wq.D
相关产品推荐
相关产品推荐

