2011-10-20 39 views
2

我試圖用引入nokogiri ruby​​解析器讀取XSD文件和它拋出以下錯誤 引入nokogiri :: XML :: SyntaxError錯誤(元素「{http://www.w3.org/2001/XMLSchema}element」:內容((simpleType | complexType)?,(unique | key | keyref)*))。):XSD - 內容無效。

是否有人知道xsd有什麼問題?

<?xml version="1.0" encoding="utf-8"?> 
<xsd:schema elementFormDefault="qualified" version="1.0" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <xsd:element name="company_donation_request" type="company_donation_requestType" /> 
    <xsd:complexType name="company_donation_requestType"> 
    <xsd:sequence> 
     <xsd:element name="order" type="orderType"></xsd:element> 
     <xsd:element name="donation" type="donationType"></xsd:element> 
    </xsd:sequence> 
    </xsd:complexType> 
    <xsd:complexType name="donationType"> 
    <xsd:sequence> 
     <xsd:element name="campaign_key" type="xsd:string" minOccurs="1" maxOccurs="1" > 
     <xsd:restriction base="xsd:string"> 
      <xsd:minLength value="2"/> 
      <xsd:maxLength value="255"/> 
     </xsd:restriction> 
     </xsd:element> 
     <xsd:element name="amount" type="xsd:decimal" minOccurs="1" maxOccurs="1" ></xsd:element> 
    </xsd:sequence> 
    </xsd:complexType> 
    <xsd:complexType name="orderType"> 
    <xsd:sequence> 
     <xsd:element name="id" type="xsd:string" minOccurs="1" maxOccurs="1" > 
     <xsd:restriction base="xsd:string"> 
      <xsd:minLength value="2"/> 
      <xsd:maxLength value="255"/> 
     </xsd:restriction> 
     </xsd:element> 
     <xsd:element name="fulfillment_date" type="xsd:dateTime" minOccurs="1" maxOccurs="1" > 
     <xsd:restriction base="xsd:string"> 
      <xsd:minLength value="2"/> 
      <xsd:maxLength value="255"/> 
     </xsd:restriction> 
     </xsd:element> 
    </xsd:sequence> 
    </xsd:complexType> 
</xsd:schema> 

回答

3

你得到的錯誤,因爲xsd:restriction不允許作爲xsd:element一個孩子。嘗試將xsd:restriction添加到xsd:simpleType,然後在您的xsd:element中指定該類型。

可以直接添加xsd:simpleTypexsd:element,但因爲你是使用相同的限制的3倍,這更有意義,把它放在一個簡單類型的元素之外。

下面是一個例子。我將simpleType「stackOverflowTest」命名爲:

<xsd:schema elementFormDefault="qualified" version="1.0" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <xsd:element name="company_donation_request" type="company_donation_requestType" /> 
    <xsd:complexType name="company_donation_requestType"> 
    <xsd:sequence> 
     <xsd:element name="order" type="orderType"></xsd:element> 
     <xsd:element name="donation" type="donationType"></xsd:element> 
    </xsd:sequence> 
    </xsd:complexType> 
    <xsd:complexType name="donationType"> 
    <xsd:sequence> 
     <xsd:element name="campaign_key" type="stackOverflowTest" minOccurs="1" maxOccurs="1"/> 
     <xsd:element name="amount" type="xsd:decimal" minOccurs="1" maxOccurs="1"/> 
    </xsd:sequence> 
    </xsd:complexType> 
    <xsd:complexType name="orderType"> 
    <xsd:sequence> 
     <xsd:element name="id" type="stackOverflowTest" minOccurs="1" maxOccurs="1"/>  
     <xsd:element name="fulfillment_date" type="stackOverflowTest" minOccurs="1" maxOccurs="1"/>  
    </xsd:sequence> 
    </xsd:complexType> 
    <xsd:simpleType name="stackOverflowTest"> 
    <xsd:restriction base="xsd:string"> 
     <xsd:minLength value="2"/> 
     <xsd:maxLength value="255"/> 
    </xsd:restriction> 
    </xsd:simpleType> 
</xsd:schema> 

希望這會有所幫助。