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

XML架构验证错误-缺少元素声明

陆晓博
2023-03-14

下面是XSD。

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns:dmb="http://hmh.mycompany.com/schema/hmh/Message"
    targetNamespace="http://hmh.mycompany.com/schema/hmh/Message"
    elementFormDefault="qualified" attributeFormDefault="unqualified"
    version="1.0">

    <xsd:complexType name="Message">
        <xsd:annotation>
            <xsd:documentation>This represents the message 
            </xsd:documentation>
        </xsd:annotation>
        <xsd:sequence>
            <xsd:element name="provider" type="xsd:string" />
            <xsd:element name="product" type="xsd:string" />
            <xsd:element name="status" type="xsd:string" />
        </xsd:sequence>
    </xsd:complexType>
</xsd:schema>

下面是xml文件。

<?xml version="1.0" encoding="UTF-8"?>
<Message xmlns="http://hmh.mycompany.com/schema/hmh/Message">
    <provider>PRODUCT</provider>
    <product></product>
    <status></status>
</Message>

当尝试使用http://www.utilities-online.info/xsdvalidation验证它时,我得到以下错误

第2行62:org.xml.sax.SAXParseException;行号:2;列号:62;CVC-ELT.1:找不到元素“Message”的声明。

共有1个答案

拓拔松
2023-03-14

你们很亲密。除了定义message类型之外,您还必须声明message元素本身。您可以通过添加,

<xsd:element name="Message" type="dmb:Message"/>

到您的XSD。那么您的XML将对您的XSD有效。

如果无法更改XSD,则有两个其他选项:

  1. 编写一个新的XSD,定义如上所示的message元素,以及XSD:include固定XSD中的类型定义。使用此新XSD验证XML。
  2. 在XML文件中使用xsi:type。(请参见如何在XSD中使用xsi:type限制XML元素的值?)
 类似资料:
  • 我得到了以下错误无法构建Hibernate SessionFactory;嵌套异常是org.hibernate.tool.schema.spi.模式管理异常:模式验证:缺少表[my.table] 这有版本问题吗?大多数示例都不使用模式,即使是官方的?https://github.com/spring-projects/spring-boot/tree/main/spring-boot-tests/

  • 根据C#中的模式验证XSD时得到上述错误。Schema查找列出的标记,而进入的其他标记是可选的。下面是我的XSD文件。xml文件需要如何修改,以确保它在XSD中具有下面列出的标记,并忽略额外的标记

  • 我尝试使用http://www.freeformatter.com/xml-validator-xsd.html但由于上面的错误,它失败了。我发现了许多相同的问题,但没有一个答案对我有帮助。请帮助,正确的XML/XSD是什么? 我的XML:(只有最小的一个) 我的XSD:(只有最小的一个)

  • 我对XML非常陌生,我面临着验证问题,如果我的XML和XSD文件结构良好,我也希望得到一些反馈。 在根据XSD验证XML时,我经常遇到错误- 下面的XML XSD 如果你发现其中任何一个有任何错误,请随时指出。它们都有从图案到最大长度的限制。 谢谢!!!!

  • 当我将令牌粘贴到这个网站上的JWT调试器中时:https://JWT.io/,我得到了一些信息(stable_sid,sid,sub,idp,ver,iss,aud,exp,nbf),但我似乎无法得到其中的组声明。 我在Azured AD中添加了读取Microsoft graph和Azure active directory组所需的权限,但它没有改变令牌中的任何内容。 我缺少什么来获取用户组?