2012-07-17 66 views
0

如何使用c sharp更新xml模式(.xsd)中的枚舉值?我正在使用xsd進行xml驗證。 xsd具有枚舉的簡單類型。我想在驗證xml之前以編程方式更新xsd中的這些枚舉值。在.net中編輯xsd枚舉值

<?xml version="1.0" encoding="utf-8"?> 
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema" > 
    <xs:simpleType name="Level"> 
     <xs:restriction base="xs:string"> 
      <xs:enumeration value="Overall"/> 
      <xs:enumeration value="Component" /> 
      <xs:enumeration value="Element" /> 
     </xs:restriction> 
    </xs:simpleType> 
    <xs:simpleType name="StatPot"> 
     <xs:restriction base="xs:string"> 
      <xs:enumeration value="Potential" /> 
      <xs:enumeration value="Status" /> 
      <xs:enumeration value="NA" /> 
     </xs:restriction> 
    </xs:simpleType> 
    <xs:simpleType name="Classification"> 
     <xs:restriction base="xs:string"> 
      <xs:enumeration value="NotAssessed" /> 
      <xs:enumeration value="Bad" /> 
      <xs:enumeration value="Poor" /> 
      <xs:enumeration value="Moderate" /> 
      <xs:enumeration value="Good" /> 
      <xs:enumeration value="NotHigh" /> 
      <xs:enumeration value="High" /> 
     </xs:restriction> 
    </xs:simpleType> 
    <xs:simpleType name="Str255"> 
     <xs:restriction base="xs:string"> 
      <xs:maxLength value="255"></xs:maxLength> 
     </xs:restriction> 
    </xs:simpleType> 
    <xs:simpleType name="Str100"> 
     <xs:restriction base="xs:string"> 
      <xs:maxLength value="100"></xs:maxLength> 
     </xs:restriction> 
    </xs:simpleType> 
    <xs:simpleType name="Str20"> 
     <xs:restriction base="xs:string"> 
      <xs:maxLength value="20"></xs:maxLength> 
     </xs:restriction> 
    </xs:simpleType> 
    <xs:element name="xml"> 
     <xs:complexType> 
      <xs:sequence> 
       <xs:element name="ClassificatonData"> 
        <xs:complexType> 
         <xs:sequence> 
          <xs:element maxOccurs="unbounded" name="WBClassification"> 
           <xs:complexType> 
            <xs:sequence> 
             <xs:element name="SupprortingInfo"> 
              <xs:complexType> 
               <xs:sequence> 
                <xs:element name="Driver" maxOccurs="1" minOccurs="0" type="xs:string"/> 
                <xs:element name="DataSource" maxOccurs="1" minOccurs="0" type="Str100"/> 
                <xs:element name="Contact" maxOccurs="1" minOccurs="0" type="Str100"/> 
                <xs:element name="DateRetrieved" maxOccurs="1" minOccurs="0" type="xs:date"/> 
               </xs:sequence> 
              </xs:complexType> 
             </xs:element> 
            </xs:sequence> 
            <xs:attribute name="WBName" type="xs:string" use="required" /> 
            <xs:attribute name="WBId" type="xs:string" use="required" /> 
            <xs:attribute name="ClassItemName" type="xs:string" use="required" /> 
            <xs:attribute name="ClassItemId" type="xs:string" use="required" /> 
            <xs:attribute name="Level" use="required" type="Level"/> 
            <xs:attribute name="Classification" type="Classification" use="required" /> 
            <xs:attribute name="StatPot" use="optional" type="StatPot"/> 
           </xs:complexType> 
          </xs:element> 
         </xs:sequence> 
         <xs:attribute name="Year" type="xs:unsignedShort" use="required" /> 
         <xs:attribute name="Overwrite" type="xs:boolean" use="required" /> 
        </xs:complexType> 
       </xs:element> 
      </xs:sequence> 
      <xs:attribute name="RootEntityType" type="xs:string" use="required"/> 
     </xs:complexType> 
    </xs:element> 
</xs:schema> 

回答

0

XML模式就像任何其他XML文檔一樣。您可以使用標準接近的方式,例如Linq-to-XML API(XDocument)來加載此文件並進行修改,然後解析它以創建模式。

+0

我正嘗試將模式加載到XMLSchema對象ratherthan XMLDOcument對象並獲取元素和枚舉。是否可以通過XMLSchema添加/編輯枚舉? – vgk 2012-07-17 14:02:08