JSON이 지금 매우 인기가 있기 때문에 XPath는 거의 우리가 사용하지 않습니다. 그러나 XML이 데이터 교환 형식 인 시대에 XPath는 큰 XML 문서 구조에 무작위로 액세스 할 때 매우 중요한 위치를 차지했습니다. 아마도 많은 사람들이 DOM 레벨 3 XPath가 지정된 인터페이스가 Firefox, Safari, Chrome 및 Opera에 의해 구현되었다는 것을 알지 못했을 것입니다. 그들이 구현하는 핵심 인터페이스는 XPathEvaluator이며 XPath 표현식으로 작동 할 수있는 몇 가지 방법이 포함되어 있습니다. 가장 중요한 방법은 5 개의 매개 변수 1.xpath 쿼리 문자열 2를 허용 할 수있는 Evaludure ()입니다. XPath 쿼리 문자열이 3에서 시작 해야하는 노드를 나타냅니다. 4. 네임 스페이스 파서 (나중에 소개) 4. 반환 된 결과 유형 5. 반환 된 결과는 해당 개체에 추가되어야합니다 (결과는 주로 evaluate ()를 통해 반환되기 때문에 사용됩니다.
주로 10 개의 다른 반환 유형이 있습니다. 각각은 xpathresult 객체의 상수를 나타냅니다.
많은 소개 후에이 API를 사용하여 어떻게 작동해야합니까?
evalue () 함수에 의해 반환 된 정보는 전적으로 요청 된 결과 유형에 따라 다릅니다.
xpath 쿼리를 실행하려면 xpathevaluator 객체를 사용해야합니다. 새 개체를 생성하거나 내장 객체를 사용할 수 있습니다. 새 객체를 생성하는 경우 XPathEvaluator를 초기화해야합니다.
var evaluator = new xpathevaluator (); // 첫 번째 div var result = evaluator.evaluate ( "// div", document.DocumentElement, null, xpathresult.first_ordered_node_type, null); ALERT ( "첫 번째 div id는" + result.singlenodevalue.id);
Firefox, Safari, Chrome 및 Opera에서 모든 문서 인스턴스는 xpathevaluator 인터페이스를 구현합니다. 이러한 방식으로 쿼리가 HTML 페이지에서 실행되면 Document.evaluate ()를 사용할 수 있습니다. Xmlhttprequest 또는 기타 메커니즘을 통해 XML 문서를 얻는 경우 evalue () 메소드도 사용할 수 있습니다.
// 첫 번째 div var result = document.evaluate ( "// div", documentElement, null, xpathresult.first_ordered_node_type, null); ALERT ( "첫 번째 div id는" + result.singlenodevalue.id);
다음은 여러 노드를 반환하는 두 가지 방법입니다. 먼저 예제를 살펴 보겠습니다.
// 모든 divs -iterator style var result = document.evaluate ( "// div", documentelement, null, xpathresult.ordered_node_iterator_type, null); if (result) {var node = result.iteratenext (); while (node) {alert (node.id); node = node.iteratenext (); }} // 모든 divs -snapshot style var result = document.evaluate ( "// div", documentElement, null, xpathresult.ordered_node_snapshot_type, null); if (result) {for (var i = 0, len = result.snapshotlength; i <len; i ++) {alert (result.snapshotitem (i) .id); }}네임 스페이스
html 문서에서 xpath를 사용하는 경우 evaluebury ()의 네임 스페이스 파서 매개 변수는 일반적으로 null입니다. 네임 스페이스가 포함 된 XML 문서에서 XPath를 사용하는 경향이 있다면 네임 스페이스 파서를 작성하고 사용하는 방법을 배워야합니다.
기본 네임 스페이스 외에도 각 네임 스페이스 URI는 지정된 접두사에 매핑됩니다. 각 네임 스페이스 리졸버는 XPath 엔진의 네임 스페이스 접두사 및 네임 스페이스 URI를 매핑하는 데 사용됩니다. 네임 스페이스 리졸버를 생성하는 두 가지 방법이 있습니다. 첫 번째는 다음과 같습니다. 네임 스페이스 접두사를 매개 변수로 받아들이는 메소드를 작성한 다음 다음과 같이 해당 URL을 반환합니다.
함수 Resolver (prefix) {switch (prefix) {case "wrox": "http://www.wrox.com/"을 반환합니다. 사례 "NCZ": return "http://www.nczonline.net/"; 기본값 : "http://www.yahoo.com/"을 반환합니다. }}두 번째 유형은 네임 스페이스 정보가 포함 된 노드를 사용하여 네임 스페이스 리졸버를 생성합니다.
<books xmlns : wrox = "http://www.wrox.com/"xmlns = "http://www.amazon.com/"> <wrox : professional javascript </book> </books>
<books> 요소에는 모든 네임 스페이스 정보가 포함되어 있습니다. 이 노드에 대한 참조를 xpathevaluator 객체의 CreatensResovler () 메소드로 전달한 다음 자동으로 네임 스페이스 리졸버를 얻을 수 있습니다.
좋다:
var evaluator = new xpathevaluator (); var resolver = Evaluator.CreatenSresolver (xmldoc.documentElement);
위의 방법 중 하나를 사용하면 네임 스페이스가 포함 된 XML 문서에서 쉽게 쿼리 할 수 있습니다.
var evaluator = new xpathevaluator (); var resolver = Evaluator.CreatenSresolver (xmldoc.documentElement); var result = evaluator.evaluate ( "wrox : book", xmldoc.documentElement, resolver, xpathresult.first_ordered_node_type, null); if (result) {alert (result.singlenodevalue.firstchild.nodevalue); }참고 : 네임 스페이스가 포함 된 XML 문서에서 쿼리를 실행하고 네임 스페이스 파서를 제공하지 않으면 오류가 발생합니다.
IE 브라우저에서 XPath 지원
IE8은 아직 DOM 레벨 3 XPath에 정의 된 인터페이스를 구현하지 않았지만 XPath에 대한 특정 지원도 있습니다. IE의 XPath 기능은 주로 XML 문서에서 사용할 수 있으며 문서 개체에는 사용할 수 없습니다.
IE에서 XML 문서를 생성하는 방법 :
함수 createcument () {if (typeof arguments.callee.activexstring! = "string") {var versions = [ "msxml2.domdocument.6.0", "msxml2.dodocument.3.0", "msxml2.domdocument"]; for (var i = 0, len = versions.length; i <len; i ++) {try {var xmldom = new ActiveXobject (버전 [i]); arguments.callee.activexstring = 버전 [i]; XMLDOM을 반환합니다. } catch (ex) {// skip}}} return new ActiveXobject (arguments.callee.activexstring); }문서 개체를 생성 한 후 LoadXML () 메소드를 사용하여 컨텐츠를로드 할 수 있습니다.
var xmldoc = createCument (); xmldoc.loadxml ( "");
두 번째 메소드는 XMLHTTREQUEST 객체를 통해 XML 객체를 생성합니다.
var xhr = new xmlhttprequest (), xmldoc; xhr.open ( "get", "data.xml", true); xhr.onreadystatechange = function () {if (xhr.readystate == 4) {if (xhr.status> = 200 && xhr.status <300) {xmldoc = xhr.responsexml; }}; xhr.send (null);세 번째 방법은 <xml> 태그를 사용하는 것입니다. Microsoft는 다음과 같이이 방법 XML Data Island를 호출합니다.
<xml id = "myxml"src = "data.xml"> </xml>
그 다음에:
var xmldoc = document.getElementById ( "myxml"). xmldocument;
XPath 지원 :
XML 문서 개체에서 XPath를 지원하는 두 가지 내장 방법이 있습니다.
selectsingLenode () 및 selectNodes (), 각 메소드는 XPath 표현식을 매개 변수로 받아들이고 첫 번째 일치하는 노드와 모든 일치하는 노드를 각각 다시 넣습니다.
네임 스페이스 지원 :
~을 위한
<books xmlns : wrox = "http://www.wrox.com/"xmlns = "http://www.amazon.com/"> <wrox : book> professional javascript </book>
</books>이 XML 문서의 경우 다음 메소드를 쿼리해야합니다. 즉, 먼저 setProperty ()를 사용하여 XML 문서의 네임 스페이스를 설정해야합니다.
xmldoc.setProperty ( "selectionNamespaces", "xmlns : wrox = 'http : //www.wrox.com/'xmlns = 'http : //www.amazon.com/'"); var book = xmldoc.documentelement.selectsinglenode ( "boox :");