尝试通过多个xsd文件验证xml文件

时间:2017-11-14 07:39:14

标签: xml validation xsd

我尝试验证xml文件aganist两个xsd文件,但每次验证时都会出错。我使用“xml复制编辑器”进行验证。我不知道,如果这是我的xml / xsd或程序的问题(可能无法验证aganist多个xsd!?)。有人可以帮忙吗?

我尝试按照page上的示例进行操作。

XML的文件:

<?xml version="1.0" encoding="UTF-8"?>
<PostAdress xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="D:\XML\XSD1.xsd">
    <Meta>
        <Name>Hallo</Name>
    </Meta>
</PostAdress>

XSD1.xsd:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" xmlns:xs2="http://aa.bb.cc">
    <xs:import namespace="http://aa.bb.cc" schemaLocation="D:\XML\XSD0.xsd" />
    <xs:element name="PostAdress">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="Meta" type="xs2:Adress" minOccurs="0" maxOccurs="unbounded"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>

XSD0.xsd:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" targetNamespace="http://aa.bb.cc">
  <xs:element name="Adress">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="Name" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

PS:我收到错误:“第7行出错:第96列:找不到”http://aa.bb.cc:Adress“。”我认为该程序意味着XSD1.xsd中的第7行。

PS2:我还尝试运行一个小的VB.net-App进行验证。我得到几乎相同的错误消息。所以,我认为这些文件存在问题。

2 个答案:

答案 0 :(得分:0)

我认为在导入其他 xsd方案时应该使用文件uri。 尝试替换行

<xs:import namespace="http://aa.bb.cc" schemaLocation="D:\XML\XSD0.xsd" />

这一个

<xs:import namespace="http://aa.bb.cc" schemaLocation="file:D:/XML/XSD0.xsd" />

在您的XSD1.xsd计划中

答案 1 :(得分:0)

我也用notepad ++尝试了它,结果相同。所以,我认为这可能不是两个xsd文件的问题。所以我将所有nesseary内容放在一个xsd和....相同的错误。之后,我看起来更接近我的xsd文件,我发现了错误。我有这个结构:

Instance.xml&gt;&gt; XSD1.xsd&gt;&gt; XSD0.xsd 用法&#34; PostAdress&#34; &GT;&GT; &#34; PostAdress&#34;的定义通过使用&#34; Adress&#34;作为类型&gt;&gt; &#34;地址&#34;

的定义

错误的界限是&#34; Adress&#34;的定义。我写了......

  <xs:element name="Adress">
    <xs:complexType>
      ...
    </xs:complexType>
  </xs:element>

但正确的是:

   <xs:complexType name="Adress">
      <xs:sequence>
      ...
      </xs:sequence>
   </xs:complexType>

所以我的文件看起来像:

XSD1.xsd:

  

<xs:element name="PostAdress">
    <xs:complexType>
        <xs:sequence>
            <xs:element name="Meta" type="andererNs:Adress" minOccurs="0" maxOccurs="unbounded"/>
        </xs:sequence>
    </xs:complexType>
</xs:element>

和XSD0.xsd:

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

   <xs:complexType name="Adress">
      <xs:sequence>
        <xs:element name="Name" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
      </xs:sequence>
   </xs:complexType>

</xs:schema>

最后,可以使用程序&#34; xml copy editor&#34;使用多个xsd文件进行验证。 (或记事本++)。此外,如果文件位于同一文件夹中,相对文件名就足够了。

感谢帮助者。