XPathNavigator Kullanarak Türü Kesin Olarak Belirtilmiş XML Verilerine Erişme

XPath 2.0 veri modelinin bir örneği olarak, XPathNavigator sınıfı ortak dil çalışma zamanı (CLR) türlerine eşlenen kesin olarak belirlenmiş veriler içerebilir. XPath 2.0 veri modeline göre, yalnızca öğeler ve öznitelikler kesin olarak yazılan veriler içerebilir. sınıfı, XPathNavigator bir XPathDocument veya XmlDocument nesnesi içindeki verilere erişmek için kesin olarak yazılan veriler gibi mekanizmalar ve bir veri türünden diğerine dönüştürme mekanizmaları sağlar.

XPathNavigator Tarafından Kullanıma Sunulan Tür Bilgileri

XML 1.0 verileri, DTD, XML şema tanım dili (XSD) şeması veya başka bir mekanizmayla işlenmediği sürece teknik olarak türsüzdür. Xml öğesi veya özniteliğiyle ilişkilendirilebilen bir dizi tür bilgisi kategorisi vardır.

  • Basit CLR Türleri: XML Şema dillerinden hiçbiri Ortak Dil Çalışma Zamanı (CLR) türlerini doğrudan desteklemez. Basit öğeyi ve öznitelik içeriğini en uygun CLR türü olarak görüntüleyebilmek yararlı olduğundan, tüm basit içerik, bu içeriği daha uygun bir türe iyileştirme olasılığı olan eklenen şema bilgileriyle şema bilgilerinin yokluğunda olduğu gibi String yazılabilir. özelliğini kullanarak ValueType basit öğenin ve öznitelik içeriğinin en iyi eşleşen CLR türünü bulabilirsiniz. Şema yerleşik türlerinden CLR türlerine eşleme hakkında daha fazla bilgi için bkz . System.Xml Sınıflarında Tür Desteği.

  • Basit (CLR) Türlerinin Listeleri: Basit içeriğe sahip bir öğe veya öznitelik, boşlukla ayrılmış değerlerin listesini içerebilir. Değerler bir XML Şeması tarafından "liste türü" olarak belirtilir. XML Şeması olmadığında, bu tür basit içerik tek bir metin düğümü olarak değerlendirilir. Bir XML Şeması kullanılabilir olduğunda, bu basit içerik her biri clr nesneleri koleksiyonuna eşlenen basit bir türe sahip bir dizi atomik değer olarak gösterilebilir. Şema yerleşik türlerinden CLR türlerine eşleme hakkında daha fazla bilgi için bkz . System.Xml Sınıflarında Tür Desteği.

  • Yazılan Değer: Basit türe sahip şemayla doğrulanmış bir özniteliğin veya öğenin türü alınmış bir değer vardır. Bu değer sayısal, dize veya tarih türü gibi ilkel bir türdür. XSD'deki tüm yerleşik basit türler, bir düğümün değerine yalnızca olarak değil daha uygun bir tür olarak Stringerişim sağlayan CLR türleriyle eşlenebilir. Öznitelikleri veya öğesi alt öğeleri olan bir öğe karmaşık bir tür olarak kabul edilir. Basit içeriğe sahip karmaşık bir türün (yalnızca alt öğe olarak metin düğümleri) yazılan değeri, içeriğinin basit türüyle aynıdır. Karmaşık içeriğe sahip karmaşık bir türün (bir veya daha fazla alt öğe) türü, olarak Stringdöndürülen tüm alt metin düğümlerinin birleştirmesinin dize değeridir. Şema yerleşik türlerinden CLR türlerine eşleme hakkında daha fazla bilgi için bkz . System.Xml Sınıflarında Tür Desteği.

  • Şema Diline Özgü Tür Adı: Çoğu durumda, dış şema uygulamanın yan etkisi olarak ayarlanan CLR türleri, düğümün değerine erişim sağlamak için kullanılır. Ancak, bir XML belgesine uygulanan belirli bir şemayla ilişkili türü incelemek isteyebileceğiniz durumlar olabilir. Örneğin, ekli şemaya göre "PurchaseOrder" türünde içeriğe sahip olduğu belirlenen tüm öğeleri ayıklayarak bir XML belgesinde arama yapmak isteyebilirsiniz. Bu tür bilgiler yalnızca şema doğrulamasının bir sonucu olarak ayarlanabilir ve bu bilgilere sınıfın XmlType ve SchemaInfo özellikleri XPathNavigator aracılığıyla erişilir. Daha fazla bilgi için aşağıdaki Şema Doğrulama Bilgi Kümesi Sonrası (PSVI) bölümüne bakın.

  • Şema Diline Özgü Tür Düşünceler: Diğer durumlarda, bir XML belgesine uygulanan şemaya özgü türün daha fazla ayrıntısını almak isteyebilirsiniz. Örneğin, bir XML dosyasını okurken, bazı özel hesaplamalar yapmak için XML belgesindeki her geçerli düğümün özniteliğini ayıklamak maxOccurs isteyebilirsiniz. Bu bilgiler yalnızca şema doğrulaması aracılığıyla ayarlandığından, sınıfın SchemaInfoXPathNavigator özelliği aracılığıyla erişilir. Daha fazla bilgi için aşağıdaki Şema Doğrulama Bilgi Kümesi Sonrası (PSVI) bölümüne bakın.

XPathNavigator Türemiş Erişimcileri

Aşağıdaki tabloda, bir düğüm hakkındaki tür bilgilerine erişmek için kullanılabilecek sınıfın çeşitli özellikleri ve yöntemleri XPathNavigator gösterilmektedir.

Özellik Açıklama
XmlType Bu, geçerliyse düğümün XML şema türü bilgilerini içerir.
SchemaInfo Bu, doğrulamadan sonra eklenen düğümün Şema Sonrası Doğrulama Bilgi Kümesini içerir. Buna XML şema türü bilgilerinin yanı sıra geçerlilik bilgileri dahildir.
ValueType Düğümün türü belirtilen değerin CLR türü.
TypedValue Düğümün içeriği, türü düğümün XML şema türüne en yakın olan bir veya daha fazla CLR değeridir.
ValueAsBoolean String için XPath 2.0 atama kurallarına xs:booleangöre geçerli düğümün değeri bir Boolean değere yayınlandı.
ValueAsDateTime String için XPath 2.0 atama kurallarına xs:datetimegöre geçerli düğümün değeri bir DateTime değere yayınlandı.
ValueAsDouble String için XPath 2.0 atama kurallarına xsd:doublegöre geçerli düğümün değeri bir Double değere yayınlandı.
ValueAsInt String için XPath 2.0 atama kurallarına xs:integergöre geçerli düğümün değeri bir Int32 değere yayınlandı.
ValueAsLong String için XPath 2.0 atama kurallarına xs:integergöre geçerli düğümün değeri bir Int64 değere yayınlandı.
ValueAs Düğümün içeriği, XPath 2.0 atama kurallarına göre hedef türe yayınlar.

Şema yerleşik türlerinden CLR türlerine eşleme hakkında daha fazla bilgi için bkz . System.Xml Sınıflarında Tür Desteği.

Şema Sonrası Doğrulama Bilgi Kümesi (PSVI)

XML Şeması işlemcisi giriş olarak bir XML Infoset'i kabul eder ve bunu Şema Sonrası Doğrulama Bilgi Kümesine (PSVI) dönüştürür. PSVI, yeni bilgi öğelerinin eklendiği ve yeni özelliklerin mevcut bilgi öğelerine eklendiği özgün giriş XML bilgi kümesidir. PSVI'de XML Infoset'e eklenen ve tarafından XPathNavigatorkullanıma sunulan üç geniş bilgi sınıfı vardır.

  1. Doğrulama Sonuçları: Bir öğenin veya özniteliğin başarıyla doğrulanıp doğrulanmadığına ilişkin bilgiler. Bu, sınıfının özelliğinin özelliği tarafından Validity kullanıma sunulurXPathNavigator.SchemaInfo

  2. Varsayılan Bilgi: Öğenin veya özniteliğin değerinin şemada belirtilen varsayılan değerler aracılığıyla alınıp alınmadığını gösterir. Bu, sınıfının özelliğinin özelliği tarafından IsDefault kullanıma sunulurXPathNavigator.SchemaInfo

  3. Tür Ek Açıklamaları: Tür tanımları veya öğe ve öznitelik bildirimleri olabilecek şema bileşenlerine başvurular. XmlType özelliğiXPathNavigator, geçerliyse düğümün belirli tür bilgilerini içerir. Bir düğümün geçerliliği bilinmiyorsa(örneğin, doğrulandığı zaman) daha sonra düzenlenir. XmlType ardından özelliği olarak null ayarlanır, ancak tür bilgileri sınıfın özelliğinin SchemaInfoXPathNavigator çeşitli özelliklerinden hala kullanılabilir.

Aşağıdaki örnekte, tarafından kullanıma sunulan Şema Sonrası Doğrulama Bilgi Kümesindeki bilgilerin kullanımı gösterilmektedir XPathNavigator.

Dim settings As XmlReaderSettings = New XmlReaderSettings()  
settings.Schemas.Add("http://www.contoso.com/books", "books.xsd")  
settings.ValidationType = ValidationType.Schema  
  
Dim reader As XmlReader = XmlReader.Create("books.xml", settings)  
  
Dim document As XmlDocument = New XmlDocument()  
document.Load(reader)  
Dim navigator As XPathNavigator = document.CreateNavigator()  
navigator.MoveToChild("books", "http://www.contoso.com/books")  
navigator.MoveToChild("book", "http://www.contoso.com/books")  
navigator.MoveToChild("published", "http://www.contoso.com/books")  
  
Console.WriteLine(navigator.SchemaInfo.SchemaType.Name)  
Console.WriteLine(navigator.SchemaInfo.Validity)  
Console.WriteLine(navigator.SchemaInfo.SchemaElement.MinOccurs)  
XmlReaderSettings settings = new XmlReaderSettings();  
settings.Schemas.Add("http://www.contoso.com/books", "books.xsd");  
settings.ValidationType = ValidationType.Schema;  
  
XmlReader reader = XmlReader.Create("books.xml", settings);  
  
XmlDocument document = new XmlDocument();  
document.Load(reader);  
XPathNavigator navigator = document.CreateNavigator();  
navigator.MoveToChild("books", "http://www.contoso.com/books");  
navigator.MoveToChild("book", "http://www.contoso.com/books");  
navigator.MoveToChild("published", "http://www.contoso.com/books");  
  
Console.WriteLine(navigator.SchemaInfo.SchemaType.Name);  
Console.WriteLine(navigator.SchemaInfo.Validity);  
Console.WriteLine(navigator.SchemaInfo.SchemaElement.MinOccurs);  

Örnek, dosyayı giriş olarak alır books.xml .

<books xmlns="http://www.contoso.com/books">  
    <book>  
        <title>Title</title>  
        <price>10.00</price>  
        <published>2003-12-31</published>  
    </book>  
</books>  

Örnek ayrıca şemayı books.xsd giriş olarak alır.

<xs:schema xmlns="http://www.contoso.com/books"
attributeFormDefault="unqualified" elementFormDefault="qualified"
targetNamespace="http://www.contoso.com/books"
xmlns:xs="http://www.w3.org/2001/XMLSchema">  
    <xs:simpleType name="publishedType">  
        <xs:restriction base="xs:date">  
            <xs:minInclusive value="2003-01-01" />  
            <xs:maxInclusive value="2003-12-31" />  
        </xs:restriction>  
    </xs:simpleType>  
    <xs:complexType name="bookType">  
        <xs:sequence>  
            <xs:element name="title" type="xs:string"/>  
            <xs:element name="price" type="xs:decimal"/>  
            <xs:element name="published" type="publishedType"/>  
        </xs:sequence>  
    </xs:complexType>  
    <xs:complexType name="booksType">  
        <xs:sequence>  
            <xs:element name="book" type="bookType" />  
        </xs:sequence>  
    </xs:complexType>  
    <xs:element name="books" type="booksType" />  
</xs:schema>  

ValueAs Özelliklerini Kullanarak Yazılan Değerleri Alma

Bir düğümün türü belirtilen değeri, özelliğine TypedValueXPathNavigatorerişilerek alınabilir. Bazı durumlarda, bir düğümün türü belirtilen değerini farklı bir türe dönüştürmek isteyebilirsiniz. Bir XML düğümünden sayısal değer almak yaygın bir örnektir. Örneğin, aşağıdaki unvalidated ve untyped XML belgesini göz önünde bulundurun.

<books>  
    <book>  
        <title>Title</title>  
        <price>10.00</price>  
        <published>2003-12-31</published>  
    </book>  
</books>  

XPathNavigator öğesinde priceXmlType konumlandırıldıysa, özelliği Stringolur nullValueType ve TypedValue özelliği dizesi 10.00olur.

Ancak, , , ValueAsDoubleValueAsIntveya ValueAsLong yöntemini ve özelliklerini kullanarak ValueAsdeğeri sayısal bir değer olarak ayıklamak yine de mümkündür. Aşağıdaki örnek, yöntemini kullanarak böyle bir atama gerçekleştirmeyi ValueAs gösterir.

Dim document As New XmlDocument()  
document.Load("books.xml")  
Dim navigator As XPathNavigator = document.CreateNavigator()  
navigator.MoveToChild("books", "")  
navigator.MoveToChild("book", "")  
navigator.MoveToChild("price", "")  
  
Dim price = navigator.ValueAs(GetType(Decimal))  
Dim discount As Decimal = 0.2  
  
Console.WriteLine("The price of the book has been dropped 20% from {0:C} to {1:C}", navigator.Value, (price - price * discount))  
XmlDocument document = new XmlDocument();  
document.Load("books.xml");  
XPathNavigator navigator = document.CreateNavigator();  
navigator.MoveToChild("books", "");  
navigator.MoveToChild("book", "");  
navigator.MoveToChild("price", "");  
  
Decimal price = (decimal)navigator.ValueAs(typeof(decimal));  
  
Console.WriteLine("The price of the book has been dropped 20% from {0:C} to {1:C}", navigator.Value, (price - price * (decimal)0.20));  

Şema yerleşik türlerinden CLR türlerine eşleme hakkında daha fazla bilgi için bkz . System.Xml Sınıflarında Tür Desteği.

Ayrıca bkz.