Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Jako przykład modelu danych XPath 2.0 XPathNavigator klasa może zawierać silnie typizowane dane mapowane na typy wspólnego środowiska uruchomieniowego języka (CLR). Zgodnie z modelem danych XPath 2.0 tylko elementy i atrybuty mogą zawierać silnie typizowane dane. Klasa XPathNavigator udostępnia mechanizmy uzyskiwania dostępu do danych w obiekcie XPathDocument lub XmlDocument jako silnie typizowane dane, a także mechanizmy konwersji z jednego typu danych na inny.
Informacje o typie odsłonięte przez XPathNavigator
Dane XML 1.0 są technicznie bez typu, chyba że są przetwarzane przy użyciu schematu DTD, języka definicji schematu XML (XSD) lub innego mechanizmu. Istnieje wiele kategorii informacji o typie, które mogą być skojarzone z elementem XML lub atrybutem.
Proste typy CLR: Żaden z języków schematu XML nie obsługuje bezpośrednio typów środowiska uruchomieniowego języka wspólnego (CLR). Ponieważ przydatne jest, aby móc wyświetlać prostą zawartość elementów i atrybutów jako najbardziej odpowiedni typ CLR, w przypadku braku informacji o schemacie cała prosta zawartość może być wpisana jako String, przy czym wszelkie dodane informacje o schemacie mogą potencjalnie uściślić tę zawartość do bardziej odpowiedniego typu. Najlepiej pasujący typ CLR prostej zawartości elementu i atrybutu można znaleźć, używając właściwości ValueType. Aby uzyskać więcej informacji na temat mapowania z wbudowanych typów schematu na typy CLR, zobacz Obsługa typów w klasach System.Xml.
Listy typów prostych (CLR): element lub atrybut z prostą zawartością może zawierać listę wartości rozdzielonych odstępami. Wartości są określane przez schemat XML jako "typ listy". W przypadku braku schematu XML taka prosta zawartość byłaby traktowana jako pojedynczy węzeł tekstowy. Gdy schemat XML jest dostępny, tę prostą zawartość można uwidocznić jako serię wartości atomowych, z których każda ma prosty typ mapowany na kolekcję obiektów CLR. Aby uzyskać więcej informacji na temat mapowania z wbudowanych typów schematu na typy CLR, zobacz Obsługa typów w klasach System.Xml.
Wartość typowana: atrybut lub element zweryfikowany schematem z prostym typem ma wartość typową. Ta wartość jest typem pierwotnym, takim jak numeryczny, ciąg lub typ daty. Wszystkie wbudowane proste typy w XSD można mapować na typy CLR, które umożliwiają dostęp do wartości węzła jako bardziej pasującego typu zamiast jako String. Element posiadający atrybuty lub elementy podrzędne jest uważany za typ złożony. Wartość typowana typu złożonego z prostą zawartością (tylko węzły tekstowe jako elementy podrzędne) jest taka sama jak wartość typowana prostego typu jego zawartości. Zapisana wartość typu złożonego o złożonej zawartości (jeden lub więcej elementów podrzędnych) jest wartością ciągu wynikającą z łączenia wszystkich jego podrzędnych węzłów tekstowych zwróconych jako String. Aby uzyskać więcej informacji na temat mapowania z wbudowanych typów schematu na typy CLR, zobacz Obsługa typów w klasach System.Xml.
Schema-Language Nazwa konkretnego typu: W większości przypadków typy CLR, które są ustawiane jako skutek uboczny użycia zewnętrznego schematu, są stosowane w celu zapewnienia dostępu do wartości węzła. Mogą jednak wystąpić sytuacje, w których warto zbadać typ skojarzony z określonym schematem zastosowanym do dokumentu XML. Na przykład możesz wyszukać dokument XML, wyodrębniając wszystkie elementy, które są określane jako zawartość typu "PurchaseOrder" zgodnie z dołączonym schematem. Takie informacje o typie można ustawić tylko w wyniku weryfikacji schematu, a są one dostępne za pośrednictwem właściwości XmlType i SchemaInfo oraz klasy XPathNavigator. Aby uzyskać więcej informacji, zobacz sekcję poniżej dotyczącą Infosetu (PSVI) po walidacji schematu.
Schema-Language Refleksja typu specyficznego: w innych przypadkach możesz uzyskać więcej szczegółów dotyczących typu specyficznego dla schematu zastosowanego do dokumentu XML. Na przykład podczas odczytywania pliku XML możesz wyodrębnić atrybut
maxOccurs
dla każdego prawidłowego węzła w dokumencie XML w celu wykonania obliczeń niestandardowych. Ponieważ te informacje są ustawiane tylko za pośrednictwem weryfikacji schematu, są dostępne za pośrednictwem SchemaInfo właściwości XPathNavigator klasy. Aby uzyskać więcej informacji, zobacz sekcję poniżej dotyczącą Infosetu (PSVI) po walidacji schematu.
Metody dostępu typu XPathNavigator
W poniższej tabeli przedstawiono różne właściwości i metody XPathNavigator klasy, które mogą służyć do uzyskiwania dostępu do informacji o typie węzła.
Majątek | Opis |
---|---|
XmlType | Zawiera on informacje o typie schematu XML dla węzła, jeśli jest on prawidłowy. |
SchemaInfo | Zawiera zestaw informacji po walidacji schematu dla węzła, który zostaje dodany po tej walidacji. Obejmuje to informacje o typie schematu XML, a także informacje o ważności. |
ValueType | Typ CLR typu typizowanej wartości węzła. |
TypedValue | Zawartość węzła jako co najmniej jedne wartości CLR, których typy najbardziej odpowiadają typowi schematu XML węzła. |
ValueAsBoolean | Wartość bieżącego węzła rzutowana na wartość String zgodnie z regułami rzutowania XPath 2.0 dla Boolean. |
ValueAsDateTime | Wartość bieżącego węzła rzutowana na wartość String zgodnie z regułami rzutowania XPath 2.0 dla DateTime. |
ValueAsDouble | Wartość bieżącego węzła rzutowana na wartość String zgodnie z regułami rzutowania XPath 2.0 dla Double. |
ValueAsInt | Wartość bieżącego węzła rzutowana na wartość String zgodnie z regułami rzutowania XPath 2.0 dla Int32. |
ValueAsLong | Wartość bieżącego węzła rzutowana na wartość String zgodnie z regułami rzutowania XPath 2.0 dla Int64. |
ValueAs | Zawartość węzła jest rzutowana na typ docelowy zgodnie z regułami rzutowania XPath 2.0. |
Aby uzyskać więcej informacji na temat mapowania z wbudowanych typów schematu na typy CLR, zobacz Obsługa typów w klasach System.Xml.
Zestaw informacji po weryfikacji schematu (PSVI)
Procesor schematu XML akceptuje zestaw informacji XML jako dane wejściowe i konwertuje go na zestaw informacji po weryfikacji schematu (PSVI). PsVI to oryginalny wejściowy zestaw informacji XML z dodanymi nowymi elementami informacji i nowymi właściwościami dodanymi do istniejących elementów informacji. Istnieją trzy szerokie klasy informacji dodanych do zestawu informacji XML w programie PSVI, które są udostępniane przez program XPathNavigator.
Wyniki walidacji: informacje o tym, czy element lub atrybut został pomyślnie zweryfikowany, czy nie. Właściwość Validity właściwości SchemaInfo klasy XPathNavigator ujawnia to.
Informacje domyślne: wskazuje, czy wartość elementu lub atrybutu została uzyskana za pośrednictwem wartości domyślnych określonych w schemacie, czy nie. Właściwość IsDefault właściwości SchemaInfo klasy XPathNavigator ujawnia to.
Adnotacje typu: odwołania do składników schematu, które mogą być definicjami typów lub deklaracjami elementów i atrybutów. Właściwość XmlType obiektu XPathNavigator zawiera informacje o określonym typie węzła, jeśli jest on prawidłowy. Jeśli ważność węzła jest nieznana, na przykład wtedy, gdy został zweryfikowany, a następnie edytowany. następnie właściwość XmlType jest ustawiona na
null
, ale informacje o typie są nadal dostępne z różnych właściwości, które znajdują się wewnątrz właściwości SchemaInfo klasy XPathNavigator.
Poniższy przykład ilustruje użycie informacji w zestawie danych po weryfikacji schematu, uwidocznionych przez element 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);
Przykład przyjmuje plik books.xml
jako dane wejściowe.
<books xmlns="http://www.contoso.com/books">
<book>
<title>Title</title>
<price>10.00</price>
<published>2003-12-31</published>
</book>
</books>
W przykładzie także schemat books.xsd
jest używany jako dane wejściowe.
<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>
Uzyskiwanie wartości typowych przy użyciu właściwości ValueAs
Wartość typu węzła można pobrać, uzyskując dostęp do właściwości TypedValueXPathNavigator. W niektórych przypadkach można przekonwertować typową wartość węzła na inny typ. Typowym przykładem jest pobranie wartości liczbowej z węzła XML. Rozważmy na przykład następujący nieprzetworzany i nietypowy dokument XML.
<books>
<book>
<title>Title</title>
<price>10.00</price>
<published>2003-12-31</published>
</book>
</books>
Jeśli XPathNavigator zostanie umieszczona na elemencie price
, właściwość XmlType będzie null
, właściwość ValueType będzie String, a właściwość TypedValue będzie ciągiem 10.00
.
Jednak nadal można wyodrębnić wartość jako wartość liczbową, używając metod i właściwości ValueAs, ValueAsDouble, ValueAsInt lub ValueAsLong. Poniższy przykład ilustruje wykonanie takiego rzutowania przy użyciu ValueAs metody.
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));
Aby uzyskać więcej informacji na temat mapowania z wbudowanych typów schematu na typy CLR, zobacz Obsługa typów w klasach System.Xml.
Zobacz także
- XmlDocument
- XPathDocument
- XPathNavigator
- Obsługa typów w klasach System.Xml
- Przetwarzanie danych XML przy użyciu modelu danych XPath
- Nawigacja zestawu węzłów przy użyciu klasy XPathNavigator
- Nawigacja po węźle atrybutów i przestrzeni nazw za pomocą XPathNavigator
- Wyodrębnianie danych XML przy użyciu klasy XPathNavigator