Wyodrębnianie danych XML przy użyciu klasy XPathNavigator
Istnieje kilka różnych sposobów reprezentowania dokumentu XML w programie Microsoft .NET Framework. Obejmuje to używanie klasy String, XmlWriterXmlDocumentlub XmlReader, lub XPathDocument . Aby ułatwić przechodzenie między tymi różnymi reprezentacjami dokumentu XML, XPathNavigator klasa udostępnia wiele metod i właściwości wyodrębniania kodu XML jako StringXmlReader obiektu lub XmlWriter obiektu .
Konwertowanie klasy XPathNavigator na ciąg
Właściwość OuterXmlXPathNavigator klasy służy do pobierania znaczników całego dokumentu XML lub tylko adiustacji pojedynczego węzła i jego węzłów podrzędnych.
Uwaga
Właściwość InnerXml pobiera znaczniki tylko węzłów podrzędnych węzła węzła.
Poniższy przykład kodu pokazuje, jak zapisać cały dokument XML zawarty w XPathNavigator obiekcie jako String, a także jeden węzeł i jego węzły podrzędne.
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;
Konwertowanie klasy XPathNavigator na element XmlReader
Metoda ReadSubtree służy do przesyłania strumieniowego całej zawartości dokumentu XML lub tylko jednego węzła i jego węzłów podrzędnych XmlReader do obiektu.
Po utworzeniu obiektu przy XmlReader użyciu bieżącego węzła i jego węzłów XmlReader podrzędnych właściwość obiektu jest ustawiona ReadState na Initialwartość . XmlReader Gdy metoda obiektu jest wywoływana Read po raz pierwszy, XmlReader obiekt jest przenoszony do bieżącego węzła obiektu XPathNavigator. Nowy XmlReader obiekt będzie nadal odczytywany do końca drzewa XML. W tym momencie Read metoda zwraca wartość false
, a XmlReader właściwość obiektu jest ustawiona ReadState na EndOfFilewartość .
XPathNavigator Położenie obiektu pozostaje niezmienione przez utworzenie lub przenoszenie XmlReader obiektu. Metoda jest prawidłowa ReadSubtree tylko w przypadku położenia elementu lub węzła głównego.
W poniższym przykładzie pokazano, jak uzyskać XmlReader obiekt zawierający cały dokument XML w XPathDocument obiekcie, a także jeden węzeł i jego węzły podrzędne.
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();
W przykładzie plik jest pobierany books.xml
jako dane wejściowe.
<?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>
Konwertowanie klasy XPathNavigator na element XmlWriter
Metoda WriteSubtree służy do przesyłania strumieniowego całej zawartości dokumentu XML lub tylko jednego węzła i jego węzłów podrzędnych XmlWriter do obiektu.
XPathNavigator Położenie obiektu pozostaje niezmienione przez utworzenie XmlWriter obiektu.
W poniższym przykładzie pokazano, jak uzyskać XmlWriter obiekt zawierający cały dokument XML w XPathDocument obiekcie, a także jeden węzeł i jego węzły podrzędne.
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();
Przykład przyjmuje plik znaleziony books.xml
wcześniej w tym temacie jako dane wejściowe.
Zobacz też
- XmlDocument
- XPathDocument
- XPathNavigator
- Przetwarzanie danych XML przy użyciu modelu danych XPath
- Nawigacja po zestawie węzłów przy użyciu klasy XPathNavigator
- Nawigacja po atrybutach i przestrzeni nazw węzła przy użyciu klasy XPathNavigator
- Uzyskiwanie dostępu do silnie typizowanych danych XML przy użyciu klasy XPathNavigator