인터넷 시대에 XML 파일은 데이터를 저장하고 전송하는 역할을 합니다. Soap 프로토콜은 Xml을 통해 정보를 전달하며 데이터베이스는 Xml 파일 등을 통해 액세스됩니다. 그렇다면 XML 파일에서 필요한 정보를 빠르게 얻는 방법은 무엇입니까?
Java의 JAXP와 Microsoft.Net에는 모두 Xml 파서가 있다는 것을 알고 있습니다. Microsoft.Net은 읽는 동안 분석하는 반면, JAXP는 이를 메모리로 읽어온 다음 분석합니다(읽을 수 있는 이벤트 메커니즘도 있음). 짧아서 빨리 읽는 데 도움이 되지 않습니다. 이를 기반으로 Microsoft.Net과 JAXP는 모두 XML 파일에서 필요한 노드를 빠르게 찾을 수 있는 XPATH 메커니즘을 제공합니다.
예를 들어 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'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>
"성"이 "Austen"과 동일한 모든 제목 이름을 빠르게 찾으려면 다음을 얻을 수 있습니다.
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); } } }
이 프로그램을 실행해 보면
Book title: Pride And Prejudice Book title: Emma Book title: Sense and Sensibility
검색이 제대로 된 것을 확인할 수 있습니다.
XPATH의 일부 기능을 사용하면 간단한 정렬 및 간단한 작업도 구현할 수 있습니다. 데이터베이스의 데이터를 자주 요약해야 하는 경우 XPATH를 사용하여 이를 달성할 수 있습니다.
예:
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>
및 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>
XML 파일의 가격을 합산하여 총 가격을 얻을 수 있습니다.
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()); } } }
이 프로그램을 실행하면 결과는 다음과 같습니다.
30.97 36.9 36.9
30.97은 books.xml에 있는 모든 가격 값의 합이고, 36.9는 모든 가격 값의 합임을 알 수 있습니다. order.xml 합계의 가격 값입니다. XPAH를 통해 정보를 빠르게 찾을 수 있을 뿐만 아니라 정보에 대한 몇 가지 기본적인 처리도 수행할 수 있습니다.
위 내용은 XML 파일에서 정보를 빠르게 찾는 방법을 자세히 소개한 것입니다. 더 많은 관련 내용은 PHP 중국어 웹사이트(m.sbmmt.com)를 참고하세요!