【发布时间】:2026-01-16 18:40:01
【问题描述】:
我正在使用 xmllint --schema 选项来验证我的 XML,看起来像这样
<XML>
<Active>True</Active>
</XML>
在我的架构文件中,我有以下描述 Active 元素的行。
<xsd:element name="Active" type="xs:boolean" />
当我运行 xmllint 时,我收到错误消息,上面写着
/tmp/schema_validation.xml:73: 元素 活动:模式有效性错误: 元素“活动”:“真”不是 原子类型的有效值 'xs:boolean'。
当我将 XML 更改为
<Active>true</Active>
然后错误信息消失。
所以,看起来 xsd:boolean 对 xmllint 来说都是小写的“真/假”,但不是“真/假”。我的问题是,我怎样才能让 xmllint 接受 xsd:boolean 类型的“真” ?或者我可以使用不同的工具来验证这个 XML?在这一点上,更改 XML 或架构不是我的选择。
谢谢!
【问题讨论】:
-
如果更改源 XML 或架构不是一个选项,那么我建议通过将布尔值标准化为正确 XSD 有效值的转换来运行源 XML。
-
我曾想过这样做,但我害怕修改恰好为“真”的值。例如,如果名为“Description”的元素恰好包含值“True”,那么我不希望将其转换为“true”。我认为没有任何方法可以知道要应用规范化的元素。
-
你需要逆流而上:从源头停止生成无效的 XML。