2010-03-13 43 views
0

我的XML文件XML有效性與XSI的xsd:的nillable元素

<tns:SampleInfoResponse xsi:schemaLocation="sampleNS test.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tns="sampleNS"> 
<tns:SampleInfo> 
    <tns:firstName>String</tns:firstName> 
    <tns:lastName>String</tns:lastName> 
    <tns:lbn>String</tns:lbn> 
    <tns:LSampleDetails> 
    <tns:SampleState>String</tns:SampleState> 
    <tns:SampleId>String</tns:SampleId> 
    <tns:sample>String</tns:sample> 
    <tns:status>String</tns:status> 
    <tns:statusDate>String</tns:statusDate> 
    <tns:SampleId>String</tns:SampleId> 
    </tns:LSampleDetails> 
    **<tns:LSampleEnrlDetails/>** 
    <tns:middleName>String</tns:middleName> 
    <tns:element1>String</tns:element1> 
    <tns:element2>String</tns:element2> 
</tns:SampleInfo> 
</tns:SampleInfoResponse> 

MY XSD文件

<xsd:schema targetNamespace="sampleNS" elementFormDefault="qualified" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:tns="sampleNS" xmlns="http://www.w3.org/2001/XMLSchema"> 
    <xsd:element name="SampleInfoResponse" type="tns:SampleInfoResponseV1"/> 
<xsd:complexType name="SampleInfoResponseV1"> 
    <xsd:sequence> 
    <xsd:element name="SampleInfo" type="tns:SampleInfVO" minOccurs="0" maxOccurs="unbounded"/> 
    </xsd:sequence> 
</xsd:complexType> 
<xsd:complexType name="SampleInfVO"> 
    <xsd:sequence> 
    <xsd:element name="firstName" type="xsd:string" nillable="true"/> 
    <xsd:element name="lastName" type="xsd:string" nillable="true"/> 
    <xsd:element name="lbn" type="xsd:string" nillable="true"/> 
    <xsd:element name="LSampleDetails" type="tns:SampleDetailsVO" nillable="true" maxOccurs="unbounded"/> 
    <xsd:element name="LSampleEnrlDetails" type="tns:SampleEnrlDetailsVO" nillable="true" maxOccurs="unbounded"/> 
    <xsd:element name="middleName" type="xsd:string" nillable="true"/> 
    <xsd:element name="element1" type="xsd:string" nillable="true"/> 
    <xsd:element name="element2" type="xsd:string" nillable="true"/> 
    </xsd:sequence> 
</xsd:complexType> 
<xsd:complexType name="SampleDetailsVO"> 
    <xsd:sequence> 
    <xsd:element name="SampleState" type="xsd:string" nillable="true"/> 
    <xsd:element name="SampleId" type="xsd:string" nillable="true"/> 
    <xsd:element name="sample" type="xsd:string" nillable="true"/> 
    <xsd:element name="status" type="xsd:string" nillable="true"/> 
    <xsd:element name="statusDate" type="xsd:string" nillable="true"/> 
    <xsd:element name="SampleId" type="xsd:string" nillable="true"/> 
    </xsd:sequence> 
</xsd:complexType> 
<xsd:complexType name="SampleEnrlDetailsVO"> 
    <xsd:sequence> 
    <xsd:element name="element1" type="xsd:string" nillable="true"/> 
    <xsd:element name="element2" type="xsd:string" nillable="true"/> 
    <xsd:element name="element3" type="xsd:boolean"/> 
    </xsd:sequence> 
</xsd:complexType> 
</xsd:schema> 

解析器抱怨上<tns:LSampleEnrlDetails/>,XML文件應該是<tns:LSampleEnrlDetails xsi:nil="true"/>只爲有效的文件?通過取出整個標籤 解析器也在抱怨。

我想知道<tns:LSampleEnrlDetails/> XML文件有效根據上面的架構時,我沒有數據來填充標籤下面屬性<tns:LSampleEnrlDetails/>

回答

-1

使用,使其有效的使什麼可能的情況下此標記

<tns:LSampleEnrlDetails xsi:nill="true" /> 
1

需要的xsi:nil屬性,因爲沒有辦法一個沒有內容的元素,其內容爲空字符串和一個區分(即,爲空)。因此,您使用屬性,該屬性對於文本內容而言是「帶外」的。

就我個人而言,我不喜歡它,並認爲有更好的選擇。最簡單的是讓你的元素可選,如果它們包含空的內容,就省略它們。