当前位置: 首页 > 知识库问答 >
问题:

在PHP中验证XML并生成“人类可读”的错误消息?

昌砚
2023-03-14

我正在尝试构建一个工具来验证特定的XML并输出人类可读的结果。我现有的PHP代码使用DOMDocument::模式验证来根据. xsd文件验证XML,但是错误消息不是很友好。

例如,假设我的XML看起来像下面的示例,纬度应该是十进制:

<Person>
  <FirstName>Bret</FirstName>
  <Location>
    <Address>123 Test Ave.</Address>
    <Latitude></Latitude>
    <Longitude>30.139338</Longitude>
  </Location>
</Person>

我当前收到的错误消息是:

文档::模式验证():元素'纬度':"不是原子类型'xs: decimal'的有效值。

我想说:

XML第#5行出错:此人“Bret”的地址中的纬度为空。您必须包含有效的纬度,以便我们处理此XML。

之前也曾提出过类似的问题:

  • XSD验证失败时的自定义错误消息

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

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

谢谢!!

共有1个答案

壤驷涛
2023-03-14

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

我将开始处理的第一个问题是确定与验证错误相关的确切元素。E、 g.你的错误是

/Person/Location/Latitude

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

第二个问题是记录结构的主要构建块。

E、 众所周知,纬度是位置的一部分,也是人的一部分。您需要在某个地方管理这些知识,以提供更好的错误消息。

我也会同时做这两件事,例如输出一条更友好的错误消息和一条更技术性的错误消息。还要注意,你不能总是解决你的问题。E、 g.如果在输入中给了一个人错误的标记名,如Person,您永远无法将其解析为人性化的错误消息,因为这超出了您可以添加的知识范围。

 类似资料:
  • 本文向大家介绍个人写的PHP验证码生成类分享,包括了个人写的PHP验证码生成类分享的使用技巧和注意事项,需要的朋友参考一下 此验证码类直接拿去就可以用,也可以参考! 其中类成员codestr是生成的验证码字符串:

  • 问题内容: 我正在使用Spring进行表单输入和验证。表单控制器的命令包含正在编辑的模型。模型的某些属性是自定义类型。例如,“人”的社会保险号是自定义的SSN类型。 并在Spring表单编辑命令中包装Person: 由于Spring不知道如何将文本转换为SSN,因此我向表单控制器的活页夹注册了客户编辑器: SsnEditor只是一个可以将文本转换为SSN对象的自定义: 如果遇到无效且无法转换为SS

  • 本文向大家介绍php生成图片验证码,包括了php生成图片验证码的使用技巧和注意事项,需要的朋友参考一下 先给看下 大致的效果 那么接下来的就直接贴代码吧 再给大家分享一个可以生成中文验证码 再来一个实例吧 接下来只要在页面中调用就可以了: 如果想实现 "看不清?换一张" 效果,添加如下 JS 到页面中 以上所述就是本文的全部内容了,希望大家能够喜欢。

  • 本文向大家介绍php生成验证码函数,包括了php生成验证码函数的使用技巧和注意事项,需要的朋友参考一下 php生成验证码的函数,实用靠谱。先上下生成的验证码的效果图(这里生成的是全数字的验证码的示例效果): 下面是php生成验证码的源码:  该函数的具体使用方法请看如下这个示例(这里是生成全数字的验证码): 以上就是php如何生成验证码的实现函数,希望对大家的学习有所帮助。

  • 我没有编写C++代码,因为我的首要任务是创建有效的xml和XSD。 xml: XSD: 为了验证,我转到:https://www.freeformatter.com/xml-validator-xsd.html 错误:s4s-att-invalid-value:元素“Element”中“type”的属性值无效。记录原因:cvc-datatype-valid.1.2.1:“xs:”不是“QName”

  • 如果 XML 是由 JAXB 类(而不是由 XSD)生成的,那么我没有要验证的 XSD。如何验证 XML?JAXB 在开始取消编组之前是否会自动对 XML 进行验证?