我已经开始使用 RelaxNG 来指定 XML 消息模式,并使用 PHP DOMDocument 来验证和解析传入的消息,但无法弄清楚如何定义文本节点以使其不能为空。示例架构:
<?xml version="1.0"?>
<element name="amhAPI" xmlns="http://relaxng.org/ns/structure/1.0">
<element name="auth">
<element name="validateUser">
<element name="username">
<text/>
</element>
<element name="password">
<text/>
</element>
</element>
</element>
</element>
但是,下面的消息正在被DOMDocument::relaxNGValidate方法验证为正确(因为relaxng将任意字符串[包括一个空字符串]与text
模式匹配)并且等效于):
<?xml version="1.0"?>
<amhAPI>
<auth>
<validateUser>
<username/>
<password/>
</validateUser>
</auth>
</amhAPI>
因此,我必须为不应该为空的字段添加一堆检查和验证,如果验证器将它们识别为非空元素,则可以将其删除。
有没有办法强制非空文本?