0

我有 xsd 和 xml 文件。关闭验证时,xml 解析正常。但是通过 xsd 验证,它抱怨 xsd 中的根元素为空。

  1. 我的 xsd 文件有多个全局元素。所以基本上这可能是一个问题。我猜从 xsd,XOM 将根元素设为空。如果你能确认一下

  2. 如何在 xsd 文件中声明根元素以及最好的方法是什么,在 xsd 中将全局元素限制为只有 1 个元素对我来说并不好看


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

<xs:element name="address_book" >
<xs:complexType>
<xs:sequence>
<xs:element ref="entry" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
</xs:element>

<xs:element name="email" type="xs:string"/>
<xs:element name="first_name" type="xs:string"/>
<xs:element name="last_name" type="xs:string"/>

<xs:element name="entry">
<xs:complexType>
<xs:sequence>
<xs:element ref="first_name" minOccurs="0"/>
<xs:element ref="last_name" minOccurs="0"/>
<xs:element ref="email" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>

<?xml version="1.0" encoding="UTF-8"?>
<address_book xmlns="http://www.popcornmonsters.com/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.popcornmonsters.com/address_book.xsd">
<entry>
<first_name>Ken</first_name>
<last_name>Cochrane</last_name>
<email>ken@fakeURL.no</email>
</entry>
<entry>
<first_name>Emily</first_name>
<last_name>Cochrane</last_name>
<email>Emily@fakeURL.no</email>
</entry>
</address_book>
4

2 回答 2

0

您的架构基本上没问题,只是它最多允许一个 <entry> 元素;那时你可能想要 maxOccurs="unbounded" 。

但是,为了解决您的问题,我们需要更多地了解您如何设置解析/验证以及您使用的工具。如果您使用的是 xom.nu,请确保将命名空间感知、模式验证 XMLReader 传递给Builder 实例

于 2011-03-21T10:02:22.007 回答
-1

注意以下属性: xsi:schemaLocation="http://www.popcornmonsters.com/address_book.xsd" 它应该是一对值:URI 和文件名。所以 address_book.xsd 之前的空格是强制性的: xsi:schemaLocation="http://www.popcornmonsters.com/ address_book.xsd" 没有空格,就没有与 XML 文档关联的模式。

于 2012-06-13T14:46:46.173 回答