2011-06-07 11 views
1

XSDファイルで初期化されたXmlSchemaオブジェクトを使用しています。 XSDファイルにはいくつかのバリデーションルール(type、min、maxなど)が含まれており、一部の要素にはデフォルト値属性があります。ここXmlSchemaからデフォルト値を取得する方法

短い例である:

1. XMLファイル:

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

XMLは、XmlDocumentオブジェクトにロードされています。

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で値を取得しようとしましたが、検証が行われた後にnullに設定されています。

OK、いくつかの明確化:

デフォルト値は、ユーザーが年齢要素を割り当てていないデフォルト値を意味しています。 XMLはされている可能性が:

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

私はより正確にしようとするでしょう:

  1. 私は3つのテキストボックス、txtFirst、txtLast、およびtxtAgeを持っています。
  2. 私は3つのプロパティを持つデータオブジェクトを持っています。最初、最後と年齢。
  3. テキストボックスは、XMLファイルに基づいて初期化されているデータオブジェクトにバインドされたので、「年齢」の値がないとき、私は、スキーマ
+0

あなたは 'default value'によって何を意味するのかはっきりしないが、スキーマで許容される最も低い有効な値は? xmlにはすでに値があるようです。実際のスキーマと実際のxmlを入力してください。 – Jodrell

答えて

0

からそれを取得したいがありますされていますMSDNのXmlSchemaオブジェクトをトラバースする方法のコードサンプル:Traversing XML Schemas

この方法で、指定された要素のdefault属性の値を読み取ることができます。

+0

と私はスキーマ全体を通過せずに特定のスキーマ要素を取得したい場合は? (linqであるかもしれませんか?) – Itays

+0

xsdをXDocumentとしてロードしてLINQ-to-XMLを実行できますが、LINQ-to-XMLには使用されていませんので、ここでは例を挙げることはできません。また、LINQ-to-XSDと呼ばれる2006年版(!)からのインストールもあります。http://www.microsoft.com/downloads/en-us/details.aspx?DisplayLang=en&id=23589 – oleschri

+0

LINQ-to-XSDの最新バージョンが見つかりました。 CodePlexの-XSD:http://linqtoxsd.codeplex.com/ – oleschri

関連する問題