我正在尝试构建一个用于验证特定XML并输出人类可读结果的工具。我现有的PHP代码使用DOMDocument :: schemaValidate来根据.xsd文件验证XML,但错误消息不是很友好。
例如,让我们假装我的XML看起来像下面的示例,并且纬度应该是小数:
<Person>
<FirstName>Bret</FirstName>
<Location>
<Address>123 Test Ave.</Address>
<Latitude></Latitude>
<Longitude>30.139338</Longitude>
</Location>
</Person>
我目前得到的错误信息是:
Document :: schemaValidate():元素'纬度':''无效 原子类型'xs:decimal'的值。
我想说:
XML Line#5中的错误:“Bret”人的地址中有一个空的纬度。您必须包含有效的谷歌纵横才能让我们处理此XML。
以前曾提出过类似的问题:
但是,如果DOMDocument :: schemaValidate不是这项工作的正确工具,我愿意使用PHP或Perl编写自己的强力验证代码。请注意,我的错误消息需要引用存储在父元素中的信息,例如我的示例中的“FirstName”字段。
我的问题是:创建此验证工具的好方法是什么?是否有任何现有的代码库或教程指向我正确的方向?
谢谢!
答案 0 :(得分:1)
您可以想象这是特定于每个XML文件和格式的。
我将开始使用的第一个问题是确定与验证错误相关的确切元素。例如。你的错误是
/Person/Location/Latitude
这是在错误消息中告知特定人(元素)出错的先决条件。
第二个问题是记录你的结构的主要构建块。
E.g。众所周知 Latitude 是位置的一部分,位置是 Person 的一部分。您需要在某处管理这些知识以提供更好的错误消息。
我也会这样做,例如输出更友好的错误消息以及更具技术性的错误消息。还要注意不要总是解决问题。例如。如果在输入中 Person 被赋予了错误的标记名,例如 person ,则您永远无法将其解析为人性化的错误消息,因为这不是您可以添加的知识。