2012-07-31 72 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