【发布时间】:2018-07-06 19:11:51
【问题描述】:
这个问题是询问在 XML 中表示 NULL 的正确方法: What is the correct way to represent null XML elements?
公认的答案似乎是提供属性 xsi:nil="true" 是明确提供空内容的最佳方式。
另一个问题是关于如何在 XSD 中声明一个可空元素并提供一个的教程:
http://www.zvon.org/xxl/XMLSchemaTutorial/Output/ser_over_st0.html
鉴于这些信息,我相信我正在遵循指南,但我的 XSD 验证失败。这是一个超级简单的 XML 片段,为第二个子元素提供 nil:
<?xml version="1.0"?>
<plant xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance">
<genus>GenusValue</genus>
<species xsi:nil="true" />
</plant>
这是我认为应该验证的 XSD:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="plant">
<xs:complexType>
<xs:sequence>
<xs:element name="genus">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:maxLength value="60"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="species" nillable="true">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:maxLength value="60"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
ColdFusion2016 (XmlValidate()) 中的验证功能失败(带有一个不太有用的错误消息)。 Notepad++(带有已安装的 XML 验证工具)也将无法通过此验证,并给出错误消息:
Validation of current file using XML schema:
ERROR: Element 'species', attribute '{https://www.w3.org/2001/XMLSchema-instance}nil': The attribute '{https://www.w3.org/2001/XMLSchema-instance}nil' is not allowed.
生成 XML 的代码不在我的控制之下。我已经弄清楚如何验证:
<species></species>
但这是一个不同的问题 - 这不是当前提供 XML 的方式。 (因此,关于空字符串、minOccurs 等联合的解决方案没有帮助,除非它们验证上面给出的标签。)
也许我只是缺少或误解了有关 XSD 的某些内容? (这似乎也遵循此处给出的文档:https://www.w3schools.com/xml/el_element.asp,尽管它们实际上并未显示给出 xsi:nil="true" 值的 XML。)
zvon 示例将一个标签设置为可 nillable 的子元素,而我试图设置为 nillable 的标签是其他东西的子元素,并且本身没有子元素,但看起来我仍然在关注zvon 的例子说明了什么?
帮助?!? ;)
谢谢。
【问题讨论】:
-
这样一个问题的答案被接受的事实意味着发起者给了它一个勾号,它并没有使它成为确定的。当谈到关于做 X 的最佳方式的建议时,通常会有很多意见。
标签: xml validation xsd null