2014-03-05 36 views
1

我有以下XMLXSD可選XML標籤與未知子標籤

<File> 
    <FileName>somefile.lis</FileName> 
    <Metadata> 
    <HeaderExtension expNum ="0"> 
     <ABC>DUMMY</ABC> 
     <DEF>JUNK</DEF> 
    </HeaderExtension> 
    <HeaderExtension expNum ="1"> 
     <ABC>DUMMY</ABC> 
     <GHI>Different JUNK</GHI> 
    </HeaderExtension> 
    </Metadata> 
<File> 

元數據標籤是可選的。 HeaderExtension標記在Metadata標記下是可選的,Metadata或HeaderExtension下的所有子標記都是未知的。在我的XSD我有以下定義

<xsd:complexType name="MetadataType"> 
    <xsd:sequence> 
    <xsd:any processContents="lax" minOccurs="0" maxOccurs="unbounded" /> 
    </xsd:sequence> 
</xsd:complexType> 

<xsd:complexType name="FileInfo"> 
    <xsd:sequence> 
    <xsd:element name="FileName" type="xsd:string" 
     minOccurs="1" maxOccurs="1" /> 
    <xsd:element name="Metadata" type="MetadataType" 
     minOccurs="1" maxOccurs="1" /> 
</xsd:sequence> 

但出於某種原因,這給出了一個錯誤。 cvc-complex-type.2.4.d:找到以元素「MetadataType」開頭的無效內容。預計在這一點上不會有子元素。

如何更改xsd以便驗證xml。

+0

架構中沒有元素「MetadataType」。你如何定義File元素+ complexType?你能展示更多的模式嗎? – helderdarocha

+0

錯誤是錯誤的。錯誤是:元素元數據:模式有效性錯誤:元素'元數據':該元素不是預期的。 – user2381566

+0

您需要添加更多信息。 XML標題,命名空間,包含「Metadata」的「File」元素的定義。 – helderdarocha

回答

0

錯誤

cvc-complex-type.2.4.d: Invalid content was found starting with element 'MetadataType'. No child element is expected at this point. 

似乎並沒有被你的模式造成的。這與Metadata中的內容無關,它是anylax。這可能是您的 XML中的錯誤。 - 你沒有在你的問題包括: - 嚴格,不接受元素稱爲MetadataType

<File xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:noNamespaceSchemaLocation="schema2.xsd"> 
    <FileName>somefile.lis</FileName> 
    <Metadata> 
     ... 
    </Metadata> 
    <MetadataType>...</MetadataType> <!-- unexpected element MetadataType --> 
</File> 

(我假設的複雜類型的文件:如果你有這樣的事情會發生此錯誤)

因此可能是一個<Metadata>標記是使用其複雜類型的名稱而不是元素的名稱生成的。

+0

我寫了錯誤的錯誤。這是來自用戶的錯誤我通過「prettyprint」運行xsd,看起來像這樣,我沒有更改架構,我將xml文檔從「元數據」更改爲「MetadataType」,因爲我在架構。在解析xml文檔時,兩者都會導致相同的錯誤: 「找到的元素'MetadataType'的內容無效。此時未指定任何子元素」或 「元素'Metadata'中找到無效內容。元素預計在這一點上「 – user2381566