使用Eclipse在xml文件中进行XML验证

时间:2012-07-31 06:11:14

标签: xml xsd jaxb xml-validation xsd-validation

我在验证我的xml文件时遇到了一些问题。我收到错误消息“cvc-elt.1:无法找到元素'xsi:settings'的声明。”在我的xml文件中。对我来说,我的代码是正确的,但显然它不应该是..

我的xml文件:

<?xml version="1.0" encoding="UTF-8"?>
<xsi:settings  xmlns:xsi="http://www.w3.org/2001/XMLSchema" xsi:noNamespaceSchemaLocation="http://www.w3.org/2001/XMLSchema/Application.xsd">
    <info>
            <Version>1.0</Version>
            <Release_date>2012-07-27</Release_date>
    </info>

    <config>
        <Betriebssystem>Windows</Betriebssystem>
        <Wildcard>%</Wildcard>
        <Errormessages>
            <View1>
                <Message1>Der neue Mitarbeiter braucht ein Geburtsdatum der Form JJJJ-MM-TT und eine nicht vorhandene Personalnummer</Message1>
                <Message2>Dem Mitarbeiter muss eine Personalnummer zugewiesen werden</Message2>
            </View1>
            <View3>
                <Message1>Sie muessen mindestens ein Kriterienfeld ausfuellen"</Message1>
                <Message2>Der Mitarbeiter braucht ein Geburtsdatum der Form JJJJ-MM-TT und eine nicht vorhandene Personalnummer</Message2>
                <Message3>Sie muessen erst einen Mitarbeiter laden</Message3>
                <Message4>Problem beim Loeschen des Mitarbeiters. Ist der Mitarbeiter in der Datenbank vorhanden?</Message4>
            </View3>
        </Errormessages>
    </config>
</xsi:settings>

我的xsd文件(没有错误):

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.w3.org/2001/XMLSchema" >

 <xs:element name="settings">
 <xs:complexType>
 <xs:sequence>

 <xs:element name="info">
    <xs:complexType>
      <xs:sequence>
        <xs:element type="xs:float" name="Version"/>
        <xs:element type="xs:date" name="Release_date"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>

  <xs:element name="config">
    <xs:complexType>
      <xs:sequence>
        <xs:element type="xs:string" name="Betriebssystem"/>
        <xs:element type="xs:string" name="Wildcard"/>
        <xs:element name="Errormessages">
          <xs:complexType>
            <xs:sequence>

              <xs:element name="View1">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element type="xs:string" name="Message1"/>
                    <xs:element type="xs:string" name="Message2"/>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>

              <xs:element name="View3">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element type="xs:string" name="Message1"/>
                    <xs:element type="xs:string" name="Message2"/>
                    <xs:element type="xs:string" name="Message3"/>
                    <xs:element type="xs:string" name="Message4"/>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>

            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>


</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>

提前感谢您的帮助。

哈拉尔德

1 个答案:

答案 0 :(得分:1)

你的命名空间错了。顺便提一下,您的校正样本如下所示。首先,您必须引用XML Schema Instance命名空间(下面使用xst前缀)并使用schemaLocation(因为您有一个目标命名空间)。

<?xml version="1.0" encoding="UTF-8"?> 
<xsi:settings xmlns:xsi="http://www.w3.org/2001/XMLSchema" xmlns:xst="http://www.w3.org/2001/XMLSchema-instance" xst:schemaLocation="http://www.w3.org/2001/XMLSchema/Application.xsd"> 
    <info> 
        <Version>1.0</Version> 
        <Release_date>2012-07-27</Release_date> 
    </info> 
    <config> 
        <Betriebssystem>Windows</Betriebssystem> 
        <Wildcard>%</Wildcard> 
        <Errormessages> 
            <View1> 
                <Message1>Der neue Mitarbeiter braucht ein Geburtsdatum der Form JJJJ-MM-TT und eine nicht vorhandene Personalnummer</Message1> 
                <Message2>Dem Mitarbeiter muss eine Personalnummer zugewiesen werden</Message2> 
            </View1> 
            <View3> 
                <Message1>Sie muessen mindestens ein Kriterienfeld ausfuellen"</Message1> 
                <Message2>Der Mitarbeiter braucht ein Geburtsdatum der Form JJJJ-MM-TT und eine nicht vorhandene Personalnummer</Message2> 
                <Message3>Sie muessen erst einen Mitarbeiter laden</Message3> 
                <Message4>Problem beim Loeschen des Mitarbeiters. Ist der Mitarbeiter in der Datenbank vorhanden?</Message4> 
            </View3> 
        </Errormessages> 
    </config> 
</xsi:settings>  

我正在展示另一个例子,它常用前缀。 xsi用于XML Schema实例。尽管如此,它是任意的,如上所示,它也可以与其他东西一起使用。

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<!-- Sample XML generated by QTAssistant (http://www.paschidev.com) -->
<settings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.w3.org/2001/XMLSchema">
    <info xmlns="">
        <Version>1</Version>
        <Release_date>1900-01-01</Release_date>
    </info>
    <config xmlns="">
        <Betriebssystem>Betriebssystem1</Betriebssystem>
        <Wildcard>Wildcard1</Wildcard>
        <Errormessages>
            <View1>
                <Message1>Message11</Message1>
                <Message2>Message21</Message2>
            </View1>
            <View3>
                <Message1>Message11</Message1>
                <Message2>Message21</Message2>
                <Message3>Message31</Message3>
                <Message4>Message41</Message4>
            </View3>
        </Errormessages>
    </config>
</settings>

我不得不评论这样一个事实:一般来说,定位W3C XML Schema(XSD)uri(http://www.w3.org/2001/XMLSchema)并不是一件好事。 XML Schema Instance(XSI)uri(http://www.w3.org/2001/XMLSchema-instance)。