XPathNavigator Kullanarak XML Verilerini Ayıklama
Microsoft .NET Framework'te xml belgesini temsil etmenin birkaç farklı yolu vardır. Buna , Stringveya , , XmlWriterXmlDocumentveya XPathDocument sınıflarını XmlReaderkullanarak da dahildir. Bir XML belgesinin bu farklı gösterimleri arasında geçişi kolaylaştırmak için sınıfı, XPathNavigator XML'yi bir , XmlReader nesnesi veya XmlWriter nesnesi olarak ayıklamaya yönelik bir Stringdizi yöntem ve özellik sağlar.
XPathNavigator'ı Dizeye Dönüştürme
OuterXml sınıfının özelliğiXPathNavigator, XML belgesinin tamamının veya tek bir düğümün ve alt düğümlerinin işaretlemesini almak için kullanılır.
Not
özelliği, InnerXml bir düğümün yalnızca alt düğümlerinin işaretlemesini alır.
Aşağıdaki kod örneğinde, bir nesnede XPathNavigator bulunan XML belgesinin tamamının olarak, tek bir düğüm ve alt düğüm olarak Stringnasıl kaydedildiği gösterilmektedir.
Dim document As XPathDocument = New XPathDocument("input.xml")
Dim navigator As XPathNavigator = document.CreateNavigator()
' Save the entire input.xml document to a string.
Dim xml As String = navigator.OuterXml
' Now save the Root element and its child nodes to a string.
navigator.MoveToChild(XPathNodeType.Element)
Dim root As String = navigator.OuterXml
XPathDocument document = new XPathDocument("input.xml");
XPathNavigator navigator = document.CreateNavigator();
// Save the entire input.xml document to a string.
string xml = navigator.OuterXml;
// Now save the Root element and its child nodes to a string.
navigator.MoveToChild(XPathNodeType.Element);
string root = navigator.OuterXml;
XPathNavigator'ı XmlReader'a dönüştürme
ReadSubtree yöntemi, bir XML belgesinin veya yalnızca tek bir düğümün ve alt düğümlerinin içeriğinin tamamını bir XmlReader nesneye akışla aktarmak için kullanılır.
XmlReader Nesne geçerli düğüm ve alt düğümleriyle oluşturulduğunda, nesnenin XmlReaderReadState özelliği olarak Initialayarlanır. nesnesinin XmlReaderRead yöntemi ilk kez çağrıldığında, XmlReader geçerli düğümüne XPathNavigatortaşınır. Yeni XmlReader nesne, XML ağacının sonuna ulaşılana kadar okumaya devam eder. Bu noktada yöntemi Read döndürür false
ve nesnesinin ReadStateXmlReader özelliği olarak EndOfFileayarlanır.
XPathNavigator Nesnenin konumu, nesnenin oluşturulması veya taşınmasıyla XmlReader değişmez. ReadSubtree yöntemi yalnızca bir öğeye veya kök düğüme yerleştirildiğinde geçerlidir.
Aşağıdaki örnekte, bir nesnedeki XML belgesinin tamamını içeren bir XmlReaderXPathDocument nesnenin yanı sıra tek bir düğüm ve alt düğümlerinin nasıl alınıp alınamaya devam ettiği gösterilmektedir.
Dim document As XPathDocument = New XPathDocument("books.xml")
Dim navigator As XPathNavigator = document.CreateNavigator()
' Stream the entire XML document to the XmlReader.
Dim xml As XmlReader = navigator.ReadSubtree()
While xml.Read()
Console.WriteLine(xml.ReadInnerXml())
End While
xml.Close()
' Stream the book element and its child nodes to the XmlReader.
navigator.MoveToChild("bookstore", "")
navigator.MoveToChild("book", "")
Dim book As XmlReader = navigator.ReadSubtree()
While book.Read()
Console.WriteLine(book.ReadInnerXml())
End While
book.Close()
XPathDocument document = new XPathDocument("books.xml");
XPathNavigator navigator = document.CreateNavigator();
// Stream the entire XML document to the XmlReader.
XmlReader xml = navigator.ReadSubtree();
while (xml.Read())
{
Console.WriteLine(xml.ReadInnerXml());
}
xml.Close();
// Stream the book element and its child nodes to the XmlReader.
navigator.MoveToChild("bookstore", "");
navigator.MoveToChild("book", "");
XmlReader book = navigator.ReadSubtree();
while (book.Read())
{
Console.WriteLine(book.ReadInnerXml());
}
book.Close();
Örnek, dosyayı giriş olarak alır books.xml
.
<?xml version="1.0" encoding="utf-8" ?>
<bookstore>
<book genre="autobiography" publicationdate="1981-03-22" ISBN="1-861003-11-0">
<title>The Autobiography of Benjamin Franklin</title>
<author>
<first-name>Benjamin</first-name>
<last-name>Franklin</last-name>
</author>
<price>8.99</price>
</book>
<book genre="novel" publicationdate="1967-11-17" ISBN="0-201-63361-2">
<title>The Confidence Man</title>
<author>
<first-name>Herman</first-name>
<last-name>Melville</last-name>
</author>
<price>11.99</price>
</book>
<book genre="philosophy" publicationdate="1991-02-15" ISBN="1-861001-57-6">
<title>The Gorgias</title>
<author>
<name>Plato</name>
</author>
<price>9.99</price>
</book>
</bookstore>
XPathNavigator'ı XmlWriter'a Dönüştürme
WriteSubtree yöntemi, bir XML belgesinin veya yalnızca tek bir düğümün ve alt düğümlerinin içeriğinin tamamını bir XmlWriter nesneye akışla aktarmak için kullanılır.
XPathNavigator Nesnenin konumu, nesnenin XmlWriter oluşturulmasıyla değişmez.
Aşağıdaki örnekte, bir nesnedeki XML belgesinin tamamını içeren bir XmlWriterXPathDocument nesnenin yanı sıra tek bir düğüm ve alt düğümlerinin nasıl alınıp alınamaya devam ettiği gösterilmektedir.
Dim document As XPathDocument = New XPathDocument("books.xml")
Dim navigator As XPathNavigator = document.CreateNavigator()
' Stream the entire XML document to the XmlWriter.
Dim xml As XmlWriter = XmlWriter.Create("newbooks.xml")
navigator.WriteSubtree(xml)
xml.Close()
' Stream the book element and its child nodes to the XmlWriter.
navigator.MoveToChild("bookstore", "")
navigator.MoveToChild("book", "")
Dim book As XmlWriter = XmlWriter.Create("book.xml")
navigator.WriteSubtree(book)
book.Close()
XPathDocument document = new XPathDocument("books.xml");
XPathNavigator navigator = document.CreateNavigator();
// Stream the entire XML document to the XmlWriter.
XmlWriter xml = XmlWriter.Create("newbooks.xml");
navigator.WriteSubtree(xml);
xml.Close();
// Stream the book element and its child nodes to the XmlWriter.
navigator.MoveToChild("bookstore", "");
navigator.MoveToChild("book", "");
XmlWriter book = XmlWriter.Create("book.xml");
navigator.WriteSubtree(book);
book.Close();
Örnek, bu konunun önceki bölümlerinde bulunan dosyayı giriş olarak alır books.xml
.