XML 파일에서 정보를 빠르게 찾는 방법을 알려주는 자세한 소개

黄舟
풀어 주다: 2017-03-06 16:35:06
원래의
2577명이 탐색했습니다.

인터넷 시대에 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&#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>
로그인 후 복사

"성"이 "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=&#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);

}

}

}
로그인 후 복사

이 프로그램을 실행해 보면

Book title: Pride And Prejudice

Book title: Emma

Book title: Sense and Sensibility
로그인 후 복사

검색이 제대로 된 것을 확인할 수 있습니다.

XPATH의 일부 기능을 사용하면 간단한 정렬 및 간단한 작업도 구현할 수 있습니다. 데이터베이스의 데이터를 자주 요약해야 하는 경우 XPATH를 사용하여 이를 달성할 수 있습니다.

예:

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>
로그인 후 복사

및 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 중국어 웹사이트(www.php.cn)를 참고하세요!


관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
최신 이슈
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!