2017-08-09 114 views
0

我是xml中的新手,並且我已經分配了一個任務來使xml文件在C++程序中加載配置。 因爲我從來沒有這樣做過,所以我用xml copy editor來創建下面的xml,然後選擇create schema選項來爲xml創建一個xsd,但是當我試圖驗證它是給出錯誤時。 有人可以告訴我我做錯了什麼。xml和xsd不驗證錯誤

我還沒有編寫C++代碼,因爲我的第一要務是創建一個有效的xml和xsd。

XML:

<?xml version="1.0" encoding="UTF-8"?> 
<part_id> 
    <class_id> 
     <head> 
     <defect /> 
     <dim> 
      <dia> 
       <unit /> 
       <tolrence /> 
      </dia> 
      <rad> 
       <unit /> 
       <tolrence /> 
      </rad> 
      <height> 
       <unit /> 
       <tolrence /> 
      </height> 
     </dim> 
     </head> 
     <stamp> 
     <defect /> 
     <dim> 
      <depth> 
       <unit /> 
       <tolrence /> 
      </depth> 
      <width> 
       <unit /> 
       <tolrence /> 
      </width> 
     </dim> 
     </stamp> 
     <prethread> 
     <defect /> 
     <dim> 
      <dia> 
       <unit /> 
       <tolrence /> 
      </dia> 
      <length> 
       <unit /> 
       <tolrence /> 
      </length> 
     </dim> 
     </prethread> 
     <thread_seg> 
     <defect /> 
     <dim> 
      <dia_major> 
       <unit /> 
       <tolrence /> 
      </dia_major> 
      <length> 
       <unit /> 
       <tolrence /> 
      </length> 
     </dim> 
     </thread_seg> 
     <terminal> 
     <defect /> 
     <dim> 
      <height> 
       <unit /> 
       <tolrence /> 
      </height> 
      <length> 
       <unit /> 
       <tolrence /> 
      </length> 
     </dim> 
     </terminal> 
    </class_id> 
</part_id> 

XSD:

<?xml version="1.0" encoding="UTF-8"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"> 
    <xs:element name="part_id"> 
     <xs:complexType> 
     <xs:sequence> 
      <xs:element ref="class_id" /> 
     </xs:sequence> 
     </xs:complexType> 
    </xs:element> 
    <xs:element name="class_id"> 
     <xs:complexType> 
     <xs:sequence> 
      <xs:element ref="head" /> 
      <xs:element ref="stamp" /> 
      <xs:element ref="prethread" /> 
      <xs:element ref="thread_seg" /> 
      <xs:element ref="terminal" /> 
     </xs:sequence> 
     </xs:complexType> 
    </xs:element> 
    <xs:element name="head"> 
     <xs:complexType> 
     <xs:sequence> 
      <xs:element name="defect" type="xs:string" /> 
      <xs:element ref="dim" /> 
     </xs:sequence> 
     </xs:complexType> 
    </xs:element> 
    <xs:element name="dim"> 
     <xs:complexType> 
     <xs:sequence> 
      <xs:element ref="depth" minOccurs="0" /> 
      <xs:element ref="width" minOccurs="0" /> 
      <xs:element ref="dia_major" minOccurs="0" /> 
      <xs:element ref="dia" minOccurs="0" /> 
      <xs:element ref="rad" minOccurs="0" /> 
      <xs:element ref="height" minOccurs="0" /> 
      <xs:element ref="length" /> 
     </xs:sequence> 
     </xs:complexType> 
    </xs:element> 
    <xs:element name="dia" type="xs:"> 
     <xs:complexType> 
     <xs:sequence> 
      <xs:element name="unit" type="xs:decimal" /> 
      <xs:element name="tolrence" type="xs:decimal" /> 
     </xs:sequence> 
     </xs:complexType> 
    </xs:element> 
    <xs:element name="rad"> 
     <xs:complexType> 
     <xs:sequence> 
      <xs:element name="unit" type="xs:decimal" /> 
      <xs:element name="tolrence" type="xs:decimal" /> 
     </xs:sequence> 
     </xs:complexType> 
    </xs:element> 
    <xs:element name="height"> 
     <xs:complexType> 
     <xs:sequence> 
      <xs:element name="unit" type="xs:decimal" /> 
      <xs:element name="tolrence" type="xs:decimal" /> 
     </xs:sequence> 
     </xs:complexType> 
    </xs:element> 
    <xs:element name="stamp"> 
     <xs:complexType> 
     <xs:sequence> 
      <xs:element name="defect" type="xs:string" /> 
      <xs:element ref="dim" /> 
     </xs:sequence> 
     </xs:complexType> 
    </xs:element> 
    <xs:element name="depth"> 
     <xs:complexType> 
     <xs:sequence> 
      <xs:element name="unit" type="xs:decimal" /> 
      <xs:element name="tolrence" type="xs:decimal" /> 
     </xs:sequence> 
     </xs:complexType> 
    </xs:element> 
    <xs:element name="width"> 
     <xs:complexType> 
     <xs:sequence> 
      <xs:element name="unit" type="xs:decimal" /> 
      <xs:element name="tolrence" type="xs:decimal" /> 
     </xs:sequence> 
     </xs:complexType> 
    </xs:element> 
    <xs:element name="prethread"> 
     <xs:complexType> 
     <xs:sequence> 
      <xs:element name="defect" type="xs:string" /> 
      <xs:element ref="dim" /> 
     </xs:sequence> 
     </xs:complexType> 
    </xs:element> 
    <xs:element name="length"> 
     <xs:complexType> 
     <xs:sequence> 
      <xs:element name="unit" type="xs:decimal" /> 
      <xs:element name="tolrence" type="xsdecimal" /> 
     </xs:sequence> 
     </xs:complexType> 
    </xs:element> 
    <xs:element name="thread_seg"> 
     <xs:complexType> 
     <xs:sequence> 
      <xs:element name="defect" type="xs:string" /> 
      <xs:element ref="dim" /> 
     </xs:sequence> 
     </xs:complexType> 
    </xs:element> 
    <xs:element name="dia_major"> 
     <xs:complexType> 
     <xs:sequence> 
      <xs:element name="unit" type="xs:decimal" /> 
      <xs:element name="tolrence" type="xs:decimal" /> 
     </xs:sequence> 
     </xs:complexType> 
    </xs:element> 
    <xs:element name="terminal"> 
     <xs:complexType> 
     <xs:sequence> 
      <xs:element name="defect" type="xs:string" /> 
      <xs:element ref="dim" /> 
     </xs:sequence> 
     </xs:complexType> 
    </xs:element> 
</xs:schema> 

進行驗證我去:https://www.freeformatter.com/xml-validator-xsd.html

錯誤:S4S-ATT-無效值:無效的屬性值爲 '類型'元素'元素'。記錄的原因:Cvc-datatype-valid.1.2.1:'xs:'對'QName'不是有效值。

+1

什麼是錯誤,請分享你寫的代碼 –

+0

在XSD (a'e'和':'缺失)中更正你的錯別字。在XML中,你應該有容忍作爲元素的名稱。 –

回答

0

錯誤在你的XSD

<xs:element name="dia" type="xs:"> 

<xs:element name="tolrence" type="xsdecimal" /> 

然後,你需要在單元和tolrence元素的值(因爲它們是小數)

<dia> 
    <unit>123</unit> 
    <tolrence>123</tolrence> 
</dia> 

然後使用XML Editoronline XSD validator來檢查它。