2013-06-23 40 views
0

我想驗證一個xml文件。這是我的xsd:org.xml.sax.SAXParseException:cvc-complex-type.2.4.c:匹配的通配符是嚴格的,但是對於元素'ReceiptTime'沒有聲明。

<?xml version="1.0" encoding="UTF-8"?> 

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

<xs:element name="EXTRACT"> 
    <xs:complexType> 
     <xs:sequence> 
      <xs:element ref="HEAD"/> 
     </xs:sequence> 
    </xs:complexType> 

</xs:element> 

<xs:element name="HEAD"> 
<xs:complexType> 
    <xs:sequence> 
     <xs:element name="RequestId" type="xs:integer"/> 
     <xs:element name="RequestsInBatch" type="xs:string"/> 
     <xs:element name="PeriodDate" type="xs:date"/> 
     <xs:element name="Type" type="xs:string"/> 
     <xs:element name="StartDate" type="xs:date"/> 
     <xs:element name="EndDate" type="xs:date"/> 
     <xs:element name="PricingDate" type="xs:date"/> 
     <xs:any minOccurs="0"/> 
    </xs:sequence> 
</xs:complexType> 
</xs:element> 

</xs:schema> 

這裏是我的xml文件

<?xml version='1.0'?> 
<EXTRACT> 
    <HEAD> 
     <RequestId>1</RequestId> 
     <RequestsInBatch>1,2</RequestsInBatch> 
     <PeriodDate>2013-03-31</PeriodDate> 
     <Type>Monthly</Type> 
     <StartDate>2013-03-01</StartDate> 
     <EndDate>2013-03-31</EndDate> 
     <PricingDate>2013-03-29</PricingDate> 
     <ReceiptTime>2013-04-02 12:30:00</ReceiptTime> 
     <CreateTime>2013-04-02 16:00:00</CreateTime> 
     <RecordCount>3</RecordCount> 
     <ExceptionCount>1</ExceptionCount> 
     <ExtractType>FLOWS</ExtractType> 
     <ExtractCurrency>USD</ExtractCurrency> 
    </HEAD> 
</EXTRACT> 

我不關心其他的標籤,我認爲是

<xs:any minOccurs="0"/> 

但是,當我指出在Java中運行時,出現以下錯誤org.xml.sax.SAXParseException:cvc-complex-type.2.4.c:匹配的通配符是嚴格的,但是對於元素'ReceiptTime'沒有發現聲明

如何驗證文件,以便忽略任何我不在xsd中聲明的元素,因爲我不需要它們,但它們仍然位於xml文檔中?我無法控制xml文檔的內容,所以我只需要關注我想要提取的數據。

回答

1

嘗試設置processContents="lax"。默認值是strict,這意味着只要它在模式中定義,它可以是任何元素。

<xs:any processContents="lax" minOccurs="0"/> 

結帳http://msdn.microsoft.com/en-us/library/aa547371(v=BTS.20).aspx

+0

現在我收到以下錯誤:org.xml.sax.SAXParseException:cvc-complex-type.2.4.d:找到以元素'CreateTime'開頭的無效內容。預計在這一點上不會有子元素。我認爲這是說它只能允許一個元素。我如何讓它接受多個元素? –

+0

感謝您的信息,這有助於。只需簡單的修改,添加'maxOccurs =「unbounded」'就可以工作。所以現在它變成: '' –

相關問題