어떻게 빨리 XML 파일 에서 정 보 를 찾 습 니까?

인터넷 시대 에 XML 파일 은 데 이 터 를 저장 하고 전송 하 는 역할 을 했다.Soap 프로 토 콜 은 Xml 를 통 해 정 보 를 교류 하고 데이터 베 이 스 는 Xml 파일 을 통 해 액세스 합 니 다.그렇다면 어떻게 XML 파일 에서 필요 한 정 보 를 신속하게 얻 습 니까?JAVA 의 JAXP 와 Microsoft.Net 은 모두 Xml 분석 기 를 가지 고 있다 는 것 을 잘 알 고 있 습 니 다.Microsoft.Net 은 읽 으 면서 분석 하 는 것 이 고 JAXP 는 메모리 에 읽 은 후에 분석 하 는 것 입 니 다.한 마디 로 하면 빠 른 읽 기 에 불리 합 니 다.이 를 바탕 으로 Microsoft.Net 과 JAXP 는 XML 파일 에 필요 한 노드 를 빠르게 찾 을 수 있 도록 XPATH 메커니즘 을 제공 합 니 다.예 를 들 어 XML 파일 이 있 습 니 다:booksort.xml:Pride And PrejudiceJaneAusten24.95The Handmaid's TaleMargaretAtwood29.95EmmaJaneAusten19.95sense and SensibilityJaneAusten19.95우리 가'last-name'등'Austen'의 모든 제목 을 빨리 찾 고 싶다 면,다음 방법 을 통 해 얻 을 수 있 습 니 다:XmlReader Sample.cs/Corelib.net/System.Xml.Xsl/XPath Document 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 PrejudiceBook title:EmmaBook title:Sense and Sensibility 에서 찾 을 수 있 습 니 다.XPATH 의 일부 기능 을 이용 하여 간단 한 정렬 과 간단 한 연산 을 실현 할 수 있다.데이터베이스 에서 데 이 터 를 자주 모 으 려 면 XPATH 로 이 루어 집 니 다.order.xmlThe Handmaid's Tale19.95Americana16.95와:books.xmlThe Autobiography of Benjamin FranklinBenjaminFranklin8.99The Confidence ManHermanMelville11.99The GorgiasPlato9.99우 리 는 이 XML 파일 의 price 를 합 쳐 가격 총 수 를 얻 을 수 있 습 니 다.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.9736.936.9 우 리 는 30.97 은 books.xml 의 모든 price 값 의 총화 이 고 36.9 는 order.xml 의 모든 price 값 의 총화 입 니 다.XPAH 를 통 해 정 보 를 신속하게 찾 을 수 있 을 뿐만 아니 라 정 보 를 기본 적 으로 처리 할 수 있다.

좋은 웹페이지 즐겨찾기