2

我一直在通过 xsd 进行 XML 验证,但我还是新手。我尝试验证此 xml,但它向我弹出此错误:cvc-elt.1:找不到元素“客户”的声明。[5]

<?xml version="1.0"?>

<customers xmlns:xs="http://www.w3.org/2001/XMLSchema" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xsi:schemaLocation="http://w3schools.com requested_customer.xsd">

 <customer name="Vladimir Putin" address="St. Petersburg, wadim street 23, Russia"/>
</customers>

和 XSD

<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <xs:element name="customers">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="customer">
          <xs:complexType>
            <xs:simpleContent>
              <xs:extension base="xs:string">
                <xs:attribute type="xs:string" name="name"/>
                <xs:attribute type="xs:string" name="address"/>
              </xs:extension>
            </xs:simpleContent>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

谢谢你的帮助!

4

2 回答 2

4

首先,您的 XML 不为其内容使用 XML 名称空间,因此要在没有目标名称空间的情况下引用 XSD 的文件位置,您应该改用xsi:noNamespaceSchemaLocation属性。

其次,您必须确保验证程序知道 XSD 文件的位置,并且可以访问该位置。

您的 XML/XSD 组合是完全有效的。

于 2013-01-09T14:43:18.287 回答
1

此外,如果您的意图是允许多个 inside customercustomers您将需要更改:

  <xs:element name="customer">

到:

  <xs:element name="customer" maxOccurs="unbounded">

当然,maxOccurs也可以是有限值,例如100maxOccurs(和minOccurs)都默认为1)。minOccurs也可以0

于 2013-01-09T15:00:44.893 回答