2012-07-31 74 views
2

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

谢谢提前寻求你的帮助。

Harald

回答

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模式实例。尽管如此,它是任意的,如上所示,它也可以与其他东西一起工作。

<?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架构一件好事发表评论(XSD)URI(http://www.w3.org/2001/XMLSchema ),也不是XML Schema Instance(XSI)URI(http://www.w3.org/2001/XMLSchema-instance)。

+0

比你对@ petru-gardea非常清楚的解释。有用。但是,我得到了一个“s4s-elt-schema-ns:元素'element'的命名空间必须来自模式命名空间'http://www.w3.org/2001/XMLSchema'。”错误,如果我尝试更改名称空间的名称.. – user1548451 2012-08-01 07:38:56