Une introduction détaillée pour vous apprendre à trouver rapidement des informations à partir d'un fichier XML

黄舟
Libérer: 2017-03-06 16:35:06
original
2576 Les gens l'ont consulté

À l'ère d'Internet, les fichiers XML jouent un rôle dans la sauvegarde et la transmission des données. Le protocole Soap communique des informations via XML et la base de données est accessible via des fichiers XML, etc. Alors comment obtenir rapidement les informations requises à partir d’un fichier XML ?

Nous savons que JAXP de Java et Microsoft.Net ont des analyseurs XML lors de la lecture, tandis que JAXP le lit dans la mémoire puis l'analyse (il existe également un mécanisme d'événement pour lire), en bref, n'est pas propice à une lecture rapide. Sur cette base, Microsoft.Net et JAXP fournissent le mécanisme XPATH pour localiser rapidement les nœuds requis dans le fichier XML.

Par exemple, il existe un fichier XML : 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&#39;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>
Copier après la connexion

Si nous voulons trouver rapidement tous les noms de titres avec "last-name" égal à "Austen", nous peut l'obtenir via la méthode suivante :

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=&#39;Austen&#39;]");


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

}

}

}
Copier après la connexion

Exécutez ce programme, le résultat est :

Book title: Pride And Prejudice

Book title: Emma

Book title: Sense and Sensibility
Copier après la connexion

Vous pouvez voir que la recherche est correcte.

En utilisant certaines fonctions de XPATH, vous pouvez également implémenter un tri simple et des opérations simples. Si vous avez souvent besoin de résumer des données dans une base de données, vous pouvez utiliser XPATH pour y parvenir.

Tels que :

order.xml

<!--Represents a customer order-->

<order>

<book ISBN=&#39;10-861003-324&#39;>

<title>The Handmaid&#39;s Tale</title>

<price>19.95</price>

</book>

<cd ISBN=&#39;2-3631-4&#39;>

<title>Americana</title>

<price>16.95</price>

</cd>

</order>
Copier après la connexion

et : 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>
Copier après la connexion

Nous pouvons additionner les prix dans le fichier XML pour obtenir le prix total.

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

}

}


}
Copier après la connexion

Exécutez ce programme et les résultats sont les suivants :

30.97

36.9

36.9
Copier après la connexion

Nous pouvons voir que 30,97 est la somme de toutes les valeurs de prix dans books.xml, et 36,9 est in order.xml La somme de toutes les valeurs de prix. Non seulement vous pouvez trouver rapidement des informations via XPAH, mais vous pouvez également effectuer un traitement de base sur les informations.

Ce qui précède est une introduction détaillée pour vous apprendre à trouver rapidement des informations à partir d'un fichier XML. Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois (www.php.cn) !


Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!