2012-07-17 65 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