cvc-elt.1.a:找不到元素“家族”的声明

Posted

技术标签:

【中文标题】cvc-elt.1.a:找不到元素“家族”的声明【英文标题】:cvc-elt.1.a: Cannot find the declaration of element 'familia' 【发布时间】:2022-01-14 04:51:36 【问题描述】:

我正在尝试使用 xsd 验证一个非常简单的 xml,但由于某种原因我收到此错误。

cvc-elt.1.a: 找不到元素 'familia' 的声明

另外,元素“nome”存在问题:

src-resolve:无法将名称“nome”解析为(n)“元素声明”组件。

如果有人能解释一下原因,我将不胜感激。

XML 文件

<?xml version="1.0" encoding="UTF-8"?>

<familia xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xmlns="http://www.painatal.pt/familia"
         xsi:schemaLocation="http://www.painatal.pt/familia familia.xsd">
            
    <detalhesFamilia>
        <nome>Familia</nome>
        <pais>Portugal</pais>
        <cidade>Porto</cidade>
        <dataNascimento>2000-02-01</dataNascimento>
        <numeroMembros>5</numeroMembros>
    </detalhesFamilia>

    <prefDias>
        <numeroDias>5</numeroDias>
    </prefDias>
</familia>

XSD 文件

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
           targetNamespace="familia"
           elementFormDefault="qualified">

<xs:element name="nome" type="xs:string"/>
<xs:element name="pais" type="xs:string"/>
<xs:element name="cidade" type="xs:string"/>
<xs:element name="dataNascimento" type="xs:date"/>
<xs:element name="numeroMembros" type="xs:integer"/>
<xs:element name="numeroDias" type="xs:integer"/>

<xs:element name="familia">
    <xs:complexType>
        <xs:sequence>
            <xs:element ref="nome"/>
            <xs:element ref="pais"/>
            <xs:element ref="cidade"/>
            <xs:element ref="dataNascimento"/>
            <xs:element ref="numeroMembros" minOccurs="1" maxOccurs="7"/>
        </xs:sequence>
    </xs:complexType>
</xs:element>

<xs:element name="prefDias">
    <xs:complexType>
        <xs:sequence>
            <xs:element ref="numeroDias" minOccurs="1" maxOccurs="5"/>
        </xs:sequence>
    </xs:complexType>
</xs:element>

</xs:schema>

【问题讨论】:

【参考方案1】:

架构中定义的目标命名空间(“familia”)与实例中使用的实际命名空间(“http://www.painatal.pt/familia”)不匹配。

此外,在模式中,&lt;xs:element ref="nome"/&gt; 是对本地名称为 nome 的无命名空间元素的引用;你想要 &lt;xs:element ref="p:nome"/&gt; ,其中命名空间前缀 p 绑定到架构的(更正的)目标命名空间。

【讨论】:

以上是关于cvc-elt.1.a:找不到元素“家族”的声明的主要内容,如果未能解决你的问题,请参考以下文章

找不到元素“持久性”的声明

SAXParseException:找不到元素“定义”的声明

SAXParseException:找不到元素“定义”的声明

JAXB - SAXParseException 找不到元素的声明

drools 5.5.0 错误 - 找不到元素“更改集”的声明

找不到元素“上下文:注释配置”的声明