Im Internetzeitalter spielen XML-Dateien eine Rolle beim Speichern und Übertragen von Daten. Das Soap-Protokoll kommuniziert Informationen über XML und der Zugriff auf die Datenbank erfolgt über XML-Dateien usw. Wie erhält man also schnell die benötigten Informationen aus einer XML-Datei?
Wir wissen, dass sowohl Javas JAXP als auch Microsoft.Net über XML-Parser beim Lesen verfügen, während JAXP es in den Speicher einliest und es dann analysiert (es gibt auch einen Ereignismechanismus zum Lesen). kurz, ist nicht förderlich für schnelles Lesen. Auf dieser Grundlage stellen sowohl Microsoft.Net als auch JAXP den XPATH-Mechanismus bereit, um die erforderlichen Knoten in der XML-Datei schnell zu finden.
Zum Beispiel gibt es eine XML-Datei: booksort.xml:
<?xml version="1.0"?> <!-- a fragment of a book store inventory database --> <bookstore xmlns:bk="urn:samples"> <book genre="novel" publicationdate="1997" bk:ISBN="1-861001-57-8"> <title>PRide And Prejudice</title> <author> <first-name>Jane</first-name> <last-name>Austen</last-name> </author> <price>24.95</price> </book> <book genre="novel" publicationdate="1992" bk:ISBN="1-861002-30-1"> <title>The Handmaid's Tale</title> <author> <first-name>Margaret</first-name> <last-name>Atwood</last-name> </author> <price>29.95</price> </book> <book genre="novel" publicationdate="1991" bk:ISBN="1-861001-57-6"> <title>Emma</title> <author> <first-name>Jane</first-name> <last-name>Austen</last-name> </author> <price>19.95</price> </book> <book genre="novel" publicationdate="1982" bk:ISBN="1-861001-45-3"> <title>Sense and Sensibility</title> <author> <first-name>Jane</first-name> <last-name>Austen</last-name> </author> <price>19.95</price> </book> </bookstore>
Wenn wir schnell alle Titelnamen finden möchten, bei denen „Nachname“ gleich „Austen“ ist, können wir Sie können es mit der folgenden Methode abrufen:
XmlReaderSample.cs //Corelib.net/System.Xml.Xsl/XPathDocument Class //Author :Any using System; using System.IO; using System.Xml; using System.Xml.XPath; public class XmlReaderSample { public static void Main() { XmlTextReader myxtreader = new XmlTextReader("booksort.xml"); XmlReader myxreader = myxtreader; XPathDocument doc = new XPathDocument(myxreader); XPathNavigator nav = doc.CreateNavigator(); XPathExpression expr; expr = nav.Compile("descendant::book[author/last-name='Austen']"); //expr.AddSort("title", XmlSortOrder.Ascending, XmlCaSEOrder.None, "", XmlDataType.Text); XPathNodeIterator iterator = nav.Select(expr); while (iterator.MoveNext()) { XPathNavigator nav2 = iterator.Current; nav2.MoveToFirstChild(); Console.WriteLine("Book title: {0}", nav2.Value); } } }
Führen Sie dieses Programm aus. Das Ergebnis ist:
Book title: Pride And Prejudice Book title: Emma Book title: Sense and Sensibility
Sie können sehen, dass die Suche korrekt ist.
Mit einigen Funktionen in XPATH können Sie auch einfache Sortierungen und einfache Operationen implementieren. Wenn Sie häufig Daten in einer Datenbank zusammenfassen müssen, können Sie dies mit XPATH erreichen.
Zum Beispiel:
order.xml <!--Represents a customer order--> <order> <book ISBN='10-861003-324'> <title>The Handmaid's Tale</title> <price>19.95</price> </book> <cd ISBN='2-3631-4'> <title>Americana</title> <price>16.95</price> </cd> </order>
und: Books.xml
<?xml version="1.0"?> <!-- This file represents a fragment of a book store inventory database --> <bookstore> <book cc="dd" xmlns:bk="urn:sample" xmlns:ns="http://www.Any.com" genre="autobiography" publicationdate="1981" ISBN="1-861003-11-0"> <title>The Autobiography of Benjamin Franklin</title> <ns:author> <first-name>Benjamin</first-name> <last-name>Franklin</last-name> </ns:author> <price>8.99</price> </book> <book genre="novel" publicationdate="1967" 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" ISBN="1-861001-57-6"> <title>The Gorgias</title> <author> <name>Plato</name> </author> <price>9.99</price> </book> </bookstore>
Wir können die Preise in der XML-Datei summieren, um den Gesamtpreis zu erhalten.
Evaluate.cs //Corelib.net/System.Xml.Xsl/XPathNavigator Class //Author :Any using System; using System.IO; using System.Xml; using System.Xml.XPath; public class EvaluateSample { public static void Main() { EvaluateSample myEvaluateSample = new EvaluateSample(); myEvaluateSample.test("books.xml"); } public void test(String args) { try { //test Evaluate(String); XPathDocument myXPathDocument = new XPathDocument(args); XPathNavigator myXPathNavigator = myXPathDocument.CreateNavigator(); Console.WriteLine(myXPathNavigator.Evaluate("sum(descendant::book/price)")); //testEvaluate(XPathExpression); XmlDocument doc = new XmlDocument(); doc.Load("order.xml"); XPathNavigator nav = doc.CreateNavigator(); XPathExpression expr = nav.Compile("sum(//price/text())"); Console.WriteLine(nav.Evaluate(expr)); //testEvaluate(XPathExpression); XPathNodeIterator myXPathNodeIterator = nav.Select("descendant::book/title"); expr = nav.Compile("sum(//price/text())"); Console.WriteLine(nav.Evaluate(expr,myXPathNodeIterator)); } catch (Exception e) { Console.WriteLine ("Exception: {0}", e.ToString()); } } }
Führen Sie dieses Programm aus und die Ergebnisse sind wie folgt:
30.97 36.9 36.9
Wir können sehen, dass 30,97 die Summe aller Preiswerte in Books.xml ist und 36,9 in order.xml Die Summe aller Preiswerte. Mit XPAH können Sie nicht nur schnell Informationen finden, sondern auch einige grundlegende Verarbeitungsschritte an den Informationen durchführen.
Das Obige ist eine detaillierte Einführung, die Ihnen zeigt, wie Sie schnell Informationen aus einer XML-Datei finden. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (www.php.cn)!