gpt4 book ai didi

xml - 在 RelaxNG 中将元素定义为非空

转载 作者:数据小太阳 更新时间:2023-10-29 02:15:24 25 4
gpt4 key购买 nike

我已经开始使用 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 matches any arbitrary string [包括一个空的] 与 text 模式)并且等效于 ):

<?xml version="1.0"?>
<amhAPI>
<auth>
<validateUser>
<username/>
<password/>
</validateUser>
</auth>
</amhAPI>

因此,我必须为不应为空的字段添加一系列检查和验证,如果验证器将它们识别为非空元素,则可以将其删除。

有没有办法强制非空文本?

最佳答案

上述解决方案并不总是很有效。如果将 minLength facet 设置为“1”,则接受一个空白字符(或一个换行符)。如果你使用模式 .*[\S]+.* 你不能插入任何换行符,但这只对“用户名”和“密码”是个好事(见上面的例子).

正则表达式是正确的方法,但要将元素定义为非空元素,更好的解决方案(对我而言)是通用模式:(.|\n|\r)*\S(.|\n|\r)*,所以你也可以在任何地方使用换行符。

关于xml - 在 RelaxNG 中将元素定义为非空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6195885/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com