2011-06-07 50 views
1

我正在处理用XSD文件初始化的XmlSchema对象。 XSD文件包含一些验证规则(类型,最小值,最大值等),并且某些元素具有默认值属性。如何从XmlSchema获取默认值

下面是一个简单的例子:

1. XML文件:

<person> 
    <first>john</first> 
    <last>doe</last> 
    <age>50</age> 
</person> 

XML是在如下的对象被加载。

2. XSD文件:

<?xml version="1.0" encoding="iso-8859-1" ?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:element name="person" > 
     <xs:complexType> 
      <xs:all> 
       <xs:element name ="first" type="xs:string" minOccurs="0"/> 
       <xs:element name ="last" type="xs:string" minOccurs="0"/> 
       <xs:element name ="age" type="xs:integer" minOccurs="0" default="30"/> 
      </xs:all> 
     </xs:complexType> 
    </xs:element> 
</xs:schema> 

的XSD被加载到的XmlSchema对象。

3.我想检索年龄的默认值,而不执行验证和常规的XML解析,如果我必须执行验证,如果节点验证成功(验证处理程序不在在成功时调用)?

我试图获得值为IXmlSchemaInfo.SchemaElement,但它在验证发生后设置为空。

OK,一些澄清:

的默认值是指当用户没有指定的年龄元素的默认值。该XML可能是:

<person> 
    <first>john</first> 
    <last>doe</last> 
    <age></age> 
</person> 

我会尝试更精确:

  1. 我有三个文本框,txtFirst,txtLast和txtAge。
  2. 我有一个三个属性的数据对象。第一,最后和年龄。
  3. 将文本框绑定到其是基于XML的文件被初始化的数据对象,所以当出现了“年龄”没有价值,我想从架构
+0

不是很确定'默认值'是什么意思,模式允许的最低有效值?看来xml已经有了一个值。请提供实际的模式和实际的XML。 – Jodrell 2011-06-07 09:01:44

回答

0

检索它有一个代码示例介绍如何遍历MSDN上的XmlSchema对象:Traversing XML Schemas

这样您可以读取给定元素的default属性的值。

+0

,如果我想在不遍历整个模式的情况下获取特定的模式元素? (可能与linq ??) – Itays 2011-06-10 07:41:13

+0

你可以加载xsd作为XDocument并运行LINQ到XML,但我不习惯LINQ到XML,所以我不能在这里给你一个例子。还有一个名为LINQ-to-XSD的2006(!)安装程序http://www.microsoft.com/download/en/details.aspx?DisplayLang=en&id=23589 – oleschri 2011-06-10 08:07:12

+0

刚刚发现了更新版本的LINQ-to CodePlex上的-XSD:http://linqtoxsd.codeplex.com/ – oleschri 2011-06-10 08:13:05