XML 架构验证 : Cannot find the declaration of element

标签 xml xsd xml-validation xml-error

我对 XML Schema 等还是有点陌生​​,一直致力于开发一些 XML、Schema 和样式表 (XSLT)。我取得了合理的进展,但随后意识到我的架构已停止工作,因此我将其恢复到一个更简单的非描述性示例。

这是我的 XML:

<?xml version="1.0" encoding="UTF-8"?>
<Root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xmlns="Test.Namespace"  
      schemaLocation="http://myNameSpace.com Test1.xsd">
    <element1 id="001">
        <element2 id="001.1">
             <element3 id="001.1" />
        </element2>
    </element1>
</Root>

我在这里写了一个架构:

<?xml version="1.0"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
            targetNamespace="Test.Namespace"
            elementFormDefault="qualified">
    <xsd:element name="Root">
        <xsd:complexType>
            <xsd:sequence>
                <xsd:element name="element1" maxOccurs="unbounded" type="element1Type"/>
            </xsd:sequence>
        </xsd:complexType>
    </xsd:element>

    <xsd:complexType name="element1Type">
        <xsd:sequence>
            <xsd:element name="element2" maxOccurs="unbounded" type="element2Type"/>
        </xsd:sequence>
        <xsd:attribute name="id" type="xsd:string"/>
    </xsd:complexType>

    <xsd:complexType name="element2Type">
        <xsd:sequence>
            <xsd:element name="item" type="element3Type"/>
        </xsd:sequence>
        <xsd:attribute name="id" type="xsd:string"/>
    </xsd:complexType>

    <xsd:complexType name="element3Type">
         <xsd:attribute name="id" type="xsd:string"/>
    </xsd:complexType>        
 </xsd:schema>

Schema 代表我的真实 XML 结构。

现在,当我尝试验证我的 XML 时,出现此错误:

cvc-elt.1: 找不到元素“Root”的声明。 [7]

我认为这与 Root 元素上的 namespace 问题有关,但我真的不确定。

有人可以建议我做错了什么。

最佳答案

感谢上面的所有人,但现在这个问题已经解决了。为了其他人的利益,最严重的错误是按照 Ian 的建议对齐三个命名空间。

为了完整起见,这里是更正后的 XML 和 XSD

这是 XML,更正了拼写错误(对于因迟到造成的任何混淆,我们深表歉意)

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

<Root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xmlns="urn:Test.Namespace"  
      xsi:schemaLocation="urn:Test.Namespace Test1.xsd">
    <element1 id="001">
        <element2 id="001.1">
            <element3 id="001.1" />
        </element2>
    </element1>
</Root>

而且,这是架构

<?xml version="1.0"?>

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
            targetNamespace="urn:Test.Namespace"
            xmlns="urn:Test.Namespace"
            elementFormDefault="qualified">
    <xsd:element name="Root">
        <xsd:complexType>
            <xsd:sequence>
                <xsd:element name="element1" maxOccurs="unbounded" type="element1Type"/>
            </xsd:sequence>
        </xsd:complexType>
    </xsd:element>
       
    <xsd:complexType name="element1Type">
        <xsd:sequence>
            <xsd:element name="element2" maxOccurs="unbounded" type="element2Type"/>
        </xsd:sequence>
        <xsd:attribute name="id" type="xsd:string"/>
    </xsd:complexType>
       
    <xsd:complexType name="element2Type">
        <xsd:sequence>
            <xsd:element name="element3" type="element3Type"/>
        </xsd:sequence>
        <xsd:attribute name="id" type="xsd:string"/>
    </xsd:complexType>

    <xsd:complexType name="element3Type">
        <xsd:attribute name="id" type="xsd:string"/>
    </xsd:complexType>        
</xsd:schema>

再次感谢大家,我希望这对以后的其他人有用。

关于XML 架构验证 : Cannot find the declaration of element,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15642046/

相关文章:

java - 在 SAX 解析期间确定根元素

java - 按钮在第二次点击android上工作

Excel: "Cannot Load the specified XML or schema source"

php - 在 PHP 中抓取、缓存和解析远程 XML 提要、验证检查

XML XSD 架构 - 在架构中实现唯一属性值

xml - 数据库的 XSL 转换结果为 XML

php - 在 php 中的 foreach 循环中使用 while 循环执行 mysql 查询

xml - 根据所使用的 XML 解析器出现 XML 验证问题.....我如何表示要普遍接受的约束

java - 尝试与端点通信时无法识别 WSDL 类型

xml - 无法将名称 X 解析为递归 xml 架构中的元素声明组件