2011-06-07 86 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