Bagikan melalui


Ekstrak Data XML Menggunakan XPathNavigator

Ada beberapa cara berbeda untuk mewakili dokumen XML di Microsoft .NET Framework. Ini termasuk menggunakan String, atau dengan menggunakan kelas XmlReader, XmlWriter, XmlDocument, atau XPathDocument. Untuk memfasilitasi pemindahan antara representasi dokumen XML yang berbeda ini, XPathNavigator kelas menyediakan sejumlah metode dan properti untuk mengekstrak XML sebagai Stringobjek , XmlReader atau XmlWriter objek.

Mengonversi XPathNavigator menjadi String

Properti OuterXml kelas XPathNavigator digunakan untuk memperoleh markup seluruh dokumen XML atau hanya markup dari sebuah simpul tunggal dan simpul-simpul anaknya.

Nota

Properti InnerXml mendapatkan markup hanya dari simpul anak di dalam simpul.

Contoh kode berikut menunjukkan cara menyimpan seluruh dokumen XML yang XPathNavigator terkandung dalam objek sebagai String, serta satu simpul dan simpul turunannya.

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;  

Mengonversi XPathNavigator ke XmlReader

Metode ReadSubtree ini digunakan untuk mengalirkan seluruh konten dokumen XML atau hanya satu simpul dan simpul turunannya XmlReader ke objek.

Ketika objek XmlReader dibuat menggunakan simpul saat ini dan simpul anaknya, properti XmlReader dari objek ReadState diatur ke Initial. XmlReader Ketika metode objek Read dipanggil untuk pertama kalinya, XmlReader dipindahkan ke simpul saat ini dari XPathNavigator. Objek baru XmlReader terus dibaca hingga akhir pohon XML tercapai. Pada titik ini, metode Read mengembalikan false dan properti XmlReader dari objek ReadState diatur ke EndOfFile.

Posisi XPathNavigator objek tidak berubah oleh pembuatan atau pergerakan XmlReader objek. Metode ReadSubtree ini hanya valid ketika diposisikan pada elemen atau simpul akar.

Contoh berikut menunjukkan cara mendapatkan XmlReader objek yang berisi seluruh dokumen XML dan satu simpul beserta simpul turunannya dalam XPathDocument objek.

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();  

Contoh mengambil file books.xml sebagai input.

<?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>

Mengonversi XPathNavigator ke XmlWriter

Metode WriteSubtree ini digunakan untuk mengalirkan seluruh konten dokumen XML atau hanya satu simpul dan simpul turunannya XmlWriter ke objek.

Posisi XPathNavigator objek tidak berubah oleh pembuatan XmlWriter objek.

Contoh berikut menunjukkan cara mendapatkan XmlWriter objek yang berisi seluruh dokumen XML dan satu simpul beserta simpul turunannya dalam XPathDocument objek.

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();  

Contoh ini menggunakan file books.xml yang telah ditemukan sebelumnya di topik ini sebagai input.

Lihat juga