0

我正在尝试构建一个工具来验证特定的 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(): Element 'Latitude': '' 不是原子类型 'xs:decimal' 的有效值。

我想让它说:

XML 第 5 行中的错误:“Bret”人的地址中的纬度为空。您必须提供有效的纬度,我们才能处理此 XML。

之前也有人问过类似的问题:

但是,如果 DOMDocument::schemaValidate 不是适合这项工作的工具,我愿意使用 PHP 或 Perl 编写我自己的蛮力验证代码。请注意,我的错误消息需要引用存储在父元素中的信息,例如我的示例中的“FirstName”字段。

我的问题是:创建此验证工具的好方法是什么?是否有任何现有的代码库或教程可以为我指明正确的方向?

谢谢!!

4

1 回答 1

1

正如您可以想象的那样,这是特定于每个 XML 文件和格式的。

我将开始处理的第一个问题是确定与验证错误相关的确切元素。例如,您的错误是

/Person/Location/Latitude

这将是在错误消息中告知特定人员(元素)有问题的先决条件。

第二个问题是记录结构的主要组成部分。

例如,众所周知LatitudeLocation的一部分,它是Person的一部分。您需要在某个地方管理这些知识以提供更好的错误消息。

我也将两者都做,例如输出更友好的错误消息以及更技术性的错误消息。还要注意你不能总是解决你的问题。例如,如果在输入中为Person提供了错误的标记名,例如person,您永远无法将其解决为对人类友好的错误消息,因为这超出了您可以添加的知识范围。

于 2013-04-10T09:04:36.247 回答