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

针对XSD:cvc复杂类型的XML验证。2.4。A.

陶征
2023-03-14

目前我正在使用javax。xml。验证。验证程序根据给定的xsd验证xml。我已经将自定义错误处理程序设置为获取所有异常,而不是在第一个异常时退出。

Sample xsd:
        <xs:element type="xs:string" name="att1"/>
        <xs:element type="xs:string" name="att2"/>
        <xs:element type="xs:string" name="att3"/>
        <xs:element type="xs:string" name="att4"/>

In xml if att2 and att3 values are not there, I am getting below exception.
cvc-complex-type.2.4.a: Invalid content was found starting with element 'att4'. One of '{"https://******":att2}' is expected.

But I need exception to be like this i.e. both att2 and att3 should be shown in expected list.
cvc-complex-type.2.4.a: Invalid content was found starting with element 'att4'. One of '{"https://******":att2, "https://******":att3}' is expected.

我如何才能实现这一点?

共有2个答案

严心水
2023-03-14

验证器被实现为一个有限状态机。它计算从一个状态到另一个状态的允许转换。读取att1元素后,唯一允许的转换是到att2,这就是它告诉您的。研究整个有限状态机并得出如果有一个att2,然后是一个att3,那么at att4是有效的,这还不够聪明。

Saxon验证器做得比这好一点,但只好一点:它不会给你你在这里想要的东西。

如果有什么安慰的话,XSD验证器通常比regex引擎做得好得多(本质上就是这样);regex引擎通常只是告诉您输入与regex不匹配,并且不知道为什么。

李甫
2023-03-14

作为第二个元素,xsd指定att2,即您提供的att4
作为第三个元素,xsd指定att3,但您没有提供任何元素
您可以尝试使用以下选项将元素att2和/或att3设置为可选:

minOccurs="0" maxOccurs="1"

如果不起作用,您可以尝试:

<xs:element type="xs:string" name="att1"/>
<xs:choice minOccurs="0" maxOccurs="2">
        <xs:sequence>
            <xs:element maxOccurs="1" name="att2" type="xs:string" />
            <xs:element maxOccurs="1" name="att3" type="xs:string" />
        </xs:sequence>
</xs:choice>
 <xs:element type="xs:string" name="att4"/>
 类似资料:
  • 我在验证xml文件时遇到问题。在我的xml文件中,xsi:schemaLocation=“”指向xsd文件。不幸的是,这个xsd文件加载了模式依赖项。他们都指向一些网站。因此,验证失败。所有工具和库都失败,外汇xmlspy。当我指向xml文件中的xsi:schemalocation=“”本地xsd(所有依赖项都是本地的)时,验证工作很好。 我的问题与javax.xml.validation有关,我

  • 问题内容: 我需要使用给定的XSD文件验证XML文件。我只需要如果验证正常就返回true,否则返回false的方法。 问题答案: 仅返回true或false(也不需要任何外部库):

  • 我有一个servlet,它使用打包在.jar存档中的实用程序: 此实用工具获取xml文件流,针对xsd模式执行验证并解析它: xsd文件以: xml文件: Servlet Init方法抛出异常: 如何指定SAXParser在哪里需要xsd模式来验证xml文件? 附注。对不起,我的英语不好 UPD: 我正在尝试添加此属性: UPD2:在xml文件中使用“classpath:appcontext.xs

  • 问题内容: 但是,这将返回一条错误消息:线程“ main”中的异常java.lang.IllegalArgumentException:无法加载实现由http://www.w3.org/2001/XMLSchema -instance 指定的模式语言的SchemaFactory。 这是我的代码还是实际的xsd文件有问题? 问题答案: 该错误意味着您安装的Java没有任何可解析XMLSchema文件

  • 我的目标是读取CSV文件,将其转换为XML,并根据XSD对其进行验证。代码如下: 错误: 线程“main”组织中出现异常。阿帕奇。骆驼FailedToCreateRouteException:无法在以下位置创建路由1: 此外,我还想配置如果XML对给定的XSD无效,是否会发生异常。我们如何配置它? 请好心帮忙。

  • 我是XSD新手,不知道为什么我的XSD没有进行验证。我收到以下错误: s4s-elt-无效-内容.1:“参数信息”的内容无效。元素“复杂类型”无效、放错位置或出现过于频繁。 cvc复合型。2.4。d: 发现以元素“exception”开头的无效内容。此时不需要任何子元素。 XML: XSD: 我错过了什么吗?我想通过使用复杂类型并引用它们来分解它,从而使其更容易...