aboutsummaryrefslogtreecommitdiff
path: root/files/ko/introduction_to_using_xpath_in_javascript/index.html
blob: e15574b5885508e0e234ef035181e04cd70dfb96 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
---
title: Introduction to using XPath in JavaScript
slug: Introduction_to_using_XPath_in_JavaScript
tags:
  - Add-ons
  - DOM
  - Extensions
  - Transforming_XML_with_XSLT
  - Web Development
  - XPath
translation_of: Web/XPath/Introduction_to_using_XPath_in_JavaScript
---
<p>이 문서는 JavaScript 안, 확장기능, 웹사이트에서 <a href="ko/XPath">XPath</a>를 사용하기 위한 인터페이스를 설명합니다. Mozilla는 <a class="external" href="http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html">DOM 3 XPath</a>를 상당량 구현합니다. 이것은 XPath 식이 HTML과 XML 문서 모두에서 잘 돌아간다는 것을 뜻합니다.</p>

<p>XPath를 사용하는 주 인터페이스는 <a href="ko/DOM/document">document</a> 개체의 <a href="ko/DOM/document.evaluate">evaluate</a> 함수입니다.</p>

<h2 id="document.evaluate" name="document.evaluate">document.evaluate</h2>

<p>이 메소드는 <a href="ko/XML">XML</a>에 기반을 둔 문서(HTML 문서 포함)에 대해 <a href="ko/XPath">XPath</a> 식을 평가하고 단일 노드나 노드 집합일 수 있는 <code>XPathResult</code> 개체를 반환합니다. 이 메소드를 다루는 기존 문서는 <a href="ko/DOM/document.evaluate">여기</a>에 있지만 당장 우리 필요에 좀 부족하여, 더 이해가 빠른 설명을 아래에 제공합니다.</p>

<pre class="notranslate">var xpathResult = document.evaluate( xpathExpression, contextNode, namespaceResolver, resultType, result );
</pre>

<h3 id=".EB.A7.A4.EA.B0.9C.EB.B3.80.EC.88.98" name=".EB.A7.A4.EA.B0.9C.EB.B3.80.EC.88.98">매개변수</h3>

<p><a href="ko/DOM/document.evaluate">evaluate</a> 함수는 매개변수를 총 5개 취합니다.</p>

<ul>
 <li><code>xpathExpression</code>: 평가할 XPath 식을 포함하는 문자열</li>
</ul>

<ul>
 <li><code>contextNode</code>: <code>xpathExpression</code>이 평가될 모든 자식 노드를 포함하는 문서의 노드. <a href="ko/DOM/document">document</a> 노드가 가장 흔히 쓰입니다.</li>
</ul>

<ul>
 <li><code>namespaceResolver</code>: 그 접두사와 관련된 namespace URI를 나타내는 문자열을 반환하는 <code>xpathExpression</code> 내에 포함되는 모든 namespace 접두사를 넘겨주는 함수. 이는 XPath 식에 쓰(이)는 접두사와 문서에 쓰(이)는 아마도 다른 접두사 사이에 변환을 가능하게 합니다. 함수는 어느 한쪽일 수 있습니다.

  <ul>
   <li><code><a class="external" href="http://www.xulplanet.com/references/objref/XPathEvaluator.html">XPathEvaluator</a></code> 개체의 <code> <a href="ko/DOM/document.createNSResolver">createNSResolver</a></code> 메소드를 써서 <a href="#Implementing_a_Default_Namespace_Resolver">만듭니다</a>. 항상 가상으로 이를 쓰면 좋습니다.</li>
   <li>HTML 문서를 위해서나 namespace 접두사가 없을 때 쓸 수 있는 <code>null</code>. 만약 <code>xpathExpression</code>가 namespace 접두사를 포함하면 이는 <code>NAMESPACE_ERR</code> 코드를 내는 <code>DOMException</code>을 가져옴을 유의하세요.</li>
   <li>사용자 정의 맞춤(custom) 함수. 세부 내용은 부록의 <a href="#Implementing_a_User_Defined_Namespace_Resolver">사용자 정의 Namespace Resolver 쓰기</a> 절을 보세요.</li>
  </ul>
 </li>
</ul>

<ul>
 <li><code>resultType</code>: 평가 결과로 반환되기 바랐던 결과 형을 지정하는 <a href="#XPathResult_Defined_Constants">상수</a>. 가장 흔히 넘겨주는 상수는 가장 자연스러운 형으로 XPath 식의 결과를 반환하는 <code>XPathResult.ANY_TYPE</code>입니다. 부록에 <a href="#XPathResult_Defined_Constants">쓸 수 있는 상수</a> 목록 전체를 포함하는 절이 있습니다. 아래 <a href="#Specifying_the_Return_Type">반환형 지정</a> 절에서 설명합니다.</li>
</ul>

<ul>
 <li><code>result</code>: 결과를 반환하는 데 재사용하는 기존 <code>XPathResult</code> 개체나 새 <code>XPathResult</code> 개체를 만드는 데 쓸 수 있는 <code>null</code> 가운데 하나.</li>
</ul>

<h3 id=".EB.B0.98.ED.99.98.EA.B0.92" name=".EB.B0.98.ED.99.98.EA.B0.92">반환값</h3>

<p><code>resultType</code> 매개변수에서 <a href="#Specifying_the_Return_Type">지정한</a> 형의 <code>XPathResult</code> 개체인 <code>xpathResult</code>를 반환합니다. <code>XPathResult</code> 인터페이스는 <a class="external" href="http://lxr.mozilla.org/seamonkey/source/dom/public/idl/xpath/nsIDOMXPathResult.idl">여기</a>에서 정의됩니다.</p>

<h3 id="Default_Namespace_Resolver_.EA.B5.AC.ED.98.84" name="Default_Namespace_Resolver_.EA.B5.AC.ED.98.84">Default Namespace Resolver 구현</h3>

<p>우리는 <a href="ko/DOM/document">document</a> 개체의 <code>createNSResolver</code> 메소드를 써서 namespace resolver를 만듭니다.</p>

<pre class="notranslate">var nsResolver = document.createNSResolver( contextNode.ownerDocument == null ? contextNode.documentElement : contextNode.ownerDocument.documentElement );
</pre>

<p><span class="comment">Or alternatively by using the &lt;code&gt;createNSResolver&lt;/code&gt; method of a &lt;code&gt;XPathEvaluator&lt;/code&gt; object. &lt;pre&gt; var xpEvaluator = new XPathEvaluator(); var nsResolver = xpEvaluator.createNSResolver( contextNode.ownerDocument == null ? contextNode.documentElement : contextNode.ownerDocument.documentElement ); &lt;/pre&gt;</span> 그리고 나서 <code>document.evaluate</code> 함수에 <code>namespaceResolver</code> 매개변수로 <code>nsResolver</code> 변수를 넘겨줍니다.</p>

<p>XPath는 null namespace의 단 하나 뿐인 요소와 일치하는 접두사 없는 <code>QNames</code>을 정의함을 유의하세요. XPath에는 기본 namespace를 얻는 방법이 없습니다. null이 아닌 namespace의 요소나 속성을 일치시키려면, 접두사 붙은 이름 검사를 쓰고 접두사를 namespace에 매핑하는 namespace resolver를 만들어야 합니다. 아래 <a href="#Implementing_a_User_Defined_Namespace_Resolver">사용자 정의 namespace resolver 만드는</a> 법을 더 읽으세요.</p>

<h3 id=".EB.B0.98.ED.99.98.ED.98.95_.EC.A7.80.EC.A0.95" name=".EB.B0.98.ED.99.98.ED.98.95_.EC.A7.80.EC.A0.95">반환형 지정</h3>

<p><code>document.evaluate</code>로부터 반환하는 변수 <code>xpathResult</code>는 개별 노드 (<a href="#Simple_Types">단순 형</a>)나 노드 모음(collection) (<a href="#Node-Set_Types">node-set 형</a>) 가운데 하나로 구성할 수 있습니다.</p>

<h4 id=".EB.8B.A8.EC.88.9C_.ED.98.95" name=".EB.8B.A8.EC.88.9C_.ED.98.95">단순 형</h4>

<p><code>resultType</code>으로 바랐던 결과형을 어느 한쪽으로 지정할 때,</p>

<ul>
 <li><code>NUMBER_TYPE</code> - a double</li>
 <li><code>STRING_TYPE</code> - a string</li>
 <li><code>BOOLEAN_TYPE</code> - a boolean</li>
</ul>

<p>우리는 <code>XPathResult</code> 개체의 다음 속성에 각각 접근하여 식의 반환값을 얻습니다.</p>

<ul>
 <li><code>numberValue</code></li>
 <li><code>stringValue</code></li>
 <li><code>booleanValue</code></li>
</ul>

<h5 id=".EC.98.88" name=".EC.98.88"></h5>

<p>다음은 HTML 문서의 <code><span class="nowiki">&lt;p&gt;</span></code> 요소수를 얻기 위해 XPath 식 <code><a href="ko/XPath/Functions/count">count(//p)</a></code>을 씁니다.</p>

<pre class="notranslate">var paragraphCount = document.evaluate( 'count(//p)', document, null, XPathResult.ANY_TYPE, null );

alert( 'This document contains ' + paragraphCount.numberValue + ' paragraph elements' );
</pre>

<p>비록 Javascript가 표시를 위해 숫자를 문자열로 변환하는 것을 허용하더라도, <code>stringValue</code> 속성(property)을 요청하면 XPath 인터페이스는 자동으로 숫자 결과로 변환하지 않습니다. 그래서 다음 코드는 작동하지 '<strong>&lt;big&gt;&lt;/big&gt;'</strong>습니다.</p>

<pre class="notranslate">var paragraphCount = document.evaluate('count(//p)', document, null, XPathResult.ANY_TYPE, null );

alert( 'This document contains ' + paragraphCount.stringValue + ' paragraph elements' );
</pre>

<p>대신 <code>NS_DOM_TYPE_ERROR</code> 코드를 갖는 예외(exception)를 반환합니다.</p>

<h4 id="Node-Set_.ED.98.95" name="Node-Set_.ED.98.95">Node-Set 형</h4>

<p><code>XPathResult</code> 개체는 주요한 3가지 서로 다른 형으로 반환될 node-set을 허용합니다.</p>

<ul>
 <li><a href="#Iterators">Iterators</a></li>
 <li><a href="#Snapshots">Snapshots</a></li>
 <li><a href="#First_Nodes">First Nodes</a></li>
</ul>

<h5 id=".EB.B0.98.EB.B3.B5.EC.9E.90.28.ED.9B.91.EA.B0.9C.29" name=".EB.B0.98.EB.B3.B5.EC.9E.90.28.ED.9B.91.EA.B0.9C.29">반복자(훑개)</h5>

<p><code>resultType</code> 매개변수로 지정한 결과형이 어느 한쪽일 때,</p>

<ul>
 <li><code>UNORDERED_NODE_ITERATOR_TYPE</code></li>
 <li><code>ORDERED_NODE_ITERATOR_TYPE</code></li>
</ul>

<p>반환되는 <code>XPathResult</code> 개체는 일치하는 노드(<code>XPathResult</code><code>iterateNext()</code> 메소드를 써서 포함될 개별 노드에 접근함을 허용하는 반복자로 행동할)의 노드 집합입니다.</p>

<p>우리가 모든 일치하는 개별 노드에 반복하고 나면, <code>iterateNext()</code><code>null</code>을 반환합니다.</p>

<p>그러나 주의하세요, 만약 반복 도중에 문서가 바뀌면 (문서 tree가 변경됨) 그것은 반복을 무효로 만들고(invalidate) <code>XPathResult</code><code>invalidIteratorState</code> 속성을 <code>true</code>로 지정하고 <code>NS_ERROR_DOM_INVALID_STATE_ERR</code> 예외를 냅니다.</p>

<h6 id=".EB.B0.98.EB.B3.B5.EC.9E.90_.EC.98.88" name=".EB.B0.98.EB.B3.B5.EC.9E.90_.EC.98.88">반복자 예</h6>

<pre class="notranslate">var iterator = document.evaluate('//phoneNumber', documentNode, null, XPathResult.UNORDERED_NODE_ITERATOR_TYPE, null );

try {
  var thisNode = iterator.iterateNext();

  while (thisNode) {
    alert( thisNode.textContent );
    thisNode = iterator.iterateNext();
  }
}
catch (e) {
  dump( 'Error: Document tree modified during iteraton ' + e );
}
</pre>

<h5 id="Snapshots" name="Snapshots">Snapshots</h5>

<p><code>resultType</code> 매개변수로 지정한 결과형이 어느 한쪽일 때,</p>

<ul>
 <li><code>UNORDERED_NODE_SNAPSHOT_TYPE</code></li>
 <li><code>ORDERED_NODE_SNAPSHOT_TYPE</code></li>
</ul>

<p>반환되는 <code>XPathResult</code> 개체는 일치하는 노드의 static node-set이고, 그것은 <code>itemNumber</code>가 검색(retrieve)되는 노드의 index인 <code>XPathResult</code> 개체의 <code>snapshotItem(itemNumber)</code> 메소드를 통해 각 노드에 접근을 허용합니다. 포함되는 노드의 총수는 <code>snapshotLength</code> 속성을 통해 입수할 수 있습니다.</p>

<p>Snapshot은 변환 문서로 바꾸지 않습니다. 그래서 반복자와는 달리 snapshot은 무효로 만들지는 않지만 현재 문서와 들어맞지 않을지도 모릅니다, 예를 들어 노드가 이동됐을지도 모르고, 더 이상 존재하지 않는 노드나 추가될 수 있는 새 노드를 포함할지도 모릅니다.</p>

<h6 id="Snapshot_.EC.98.88" name="Snapshot_.EC.98.88">Snapshot 예</h6>

<pre class="notranslate">var nodesSnapshot = document.evaluate('//phoneNumber', documentNode, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null );

for ( var i=0 ; i &lt; nodesSnapshot.snapshotLength; i++ )
{
  dump( nodesSnapshot.snapshotItem(i).textContent );
}
</pre>

<h5 id="First_Node" name="First_Node">First Node</h5>

<p><code>resultType</code> 매개변수로 지정한 결과형이 어느 한쪽일 때,</p>

<ul>
 <li><code>ANY_UNORDERED_NODE_TYPE</code></li>
 <li><code>FIRST_ORDERED_NODE_TYPE</code></li>
</ul>

<p>반환되는 <code>XPathResult</code> 개체는 XPath 식과 일치하는 오직 처음 발견한 노드입니다. 이는 <code>XPathResult</code> 개체의 <code>singleNodeValue</code> 속성을 통해 접근할 수 있습니다. 이는 노드 집합이 비면 <code>null</code>입니다.</p>

<p>순서 없는 subtype인 경우 반환되는 단일 노드가 문서 순으로 처음이 아닐지도 모르지만 순서 있는 subtype인 경우 문서 순으로 처음 일치하는 노드임을 보장함을 유의하세요.</p>

<h6 id="First_Node_.EC.98.88" name="First_Node_.EC.98.88">First Node 예</h6>

<pre class="notranslate">var firstPhoneNumber = document.evaluate('//phoneNumber', documentNode, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null );

dump( 'The first phone number found is ' + firstPhoneNumber.singleNodeValue.textContent );
</pre>

<h4 id="ANY_TYPE_.EC.83.81.EC.88.98" name="ANY_TYPE_.EC.83.81.EC.88.98">ANY_TYPE 상수</h4>

<p><code>resultType</code> 매개변수에 결과형을 <code>ANY_TYPE</code>으로 지정할 때, 반환되는 <code>XPathResult</code> 개체는, 식 평가에서 자연스럽게 생긴 어떤 형입니다.</p>

<p>단순 형( <code>NUMBER_TYPE, STRING_TYPE, BOOLEAN_TYPE</code> ) 가운데 하나일 수도 있습니다, <strong>&lt;big&gt;하지만&lt;/big&gt;</strong>, 만약 반환되는 결과형이 node-set이면 <strong>&lt;big&gt;오직&lt;/big&gt;</strong> <code>UNORDERED_NODE_ITERATOR_TYPE</code>입니다.</p>

<p>평가 뒤 형을 결정하기 위해서, 우리는 <code>XPathResult</code> 개체의 <code>resultType</code> 속성을 씁니다. 이 속성의 <a href="#XPathResult_Defined_Constants">상수</a>값은 부록에서 정의합니다. <span class="comment">None Yet =====Any_Type 예===== &lt;pre&gt; &lt;/pre&gt;</span></p>

<h2 id=".EC.98.88_2" name=".EC.98.88_2"></h2>

<h3 id="HTML_.EB.AC.B8.EC.84.9C_.EC.95.88.EC.97.90.EC.84.9C" name="HTML_.EB.AC.B8.EC.84.9C_.EC.95.88.EC.97.90.EC.84.9C">HTML 문서 안에서</h3>

<p>다음 코드는 XPath 식이 평가될 HTML 문서 안에서나 문서에 연결(link)된 어떤 JavaScript 조각(fragment)에 놓을 셈입니다.</p>

<p>XPath를 써서 HTML의 모든 <code><span class="nowiki">&lt;h2&gt;</span></code> heading 요소를 뽑아내면(extract), <code>xpathExpression</code> 문자열은 간단히 '<code>//h2</code>'입니다. 어떤 점에서, <code>//</code>는 요소 트리 어디에서나 노드명 <code>h2</code>와 요소를 일치시키는 재귀 내림 연산자(Recursive Descent Operator)입니다. 이를 위한 자세한 코드입니다. <span class="comment">link to introductory xpath doc</span></p>

<pre class="notranslate">var headings = document.evaluate('//h2', document, null, XPathResult.ANY_TYPE, null );
</pre>

<p>HTML이 namespace가 없기 때문에, 우리는 <code>namespaceResolver</code> 매개변수에 <code>null</code>을 넘겨줌을 유의하세요.</p>

<p>우리가 문서 전체에서 heading을 찾기를 바라기 때문에, 우리는 <code>contextNode</code><a href="ko/DOM/document">document</a> 개체 자신을 씁니다.</p>

<p>이 식의 결과는 <code>XPathResult</code> 개체입니다. 우리가 반환되는 결과형을 알고 싶다면, 우리는 반환되는 개체의 <code>resultType</code> 속성을 평가할지도 모릅니다. 이 경우에는 그것은 값이 <code>4</code><code>UNORDERED_NODE_ITERATOR_TYPE</code>로 평가합니다. 이는 XPath 식의 결과가 node-set일 때 기본 반환형입니다. 동시에 단일 노드로 접근을 제공하고 특정 순서로 노드를 반환할지도 모릅니다. 반환되는 개체에 접근하기 위해, 우리는 반환되는 개체의 <code>iterateNext()</code> 메소드를 씁니다.</p>

<pre class="notranslate">var thisHeading = headings.iterateNext();

var alertText = 'Level 2 headings in this document are:\n'

while (thisHeading) {
  alertText += thisHeading.textContent + '\n';
  thisHeading = headings.iterateNext();
}
</pre>

<p>우리가 한 노드를 반복하기만 하면, 우리는 그 노드의 모든 표준 <a href="ko/DOM_interfaces">DOM interfaces</a>에 접근할 수 있습니다. 우리 식에서 반환된 모든 <code>h2</code> 요소를 반복한 뒤에, 더 이상의 <code>iterateNext()</code> 호출은 <code>null</code>을 반환합니다.</p>

<h3 id=".ED.99.95.EC.9E.A5.EA.B8.B0.EB.8A.A5_.EC.95.88.EC.97.90.EC.84.9C_XML_.EB.AC.B8.EC.84.9C_.ED.8F.89.EA.B0.80" name=".ED.99.95.EC.9E.A5.EA.B8.B0.EB.8A.A5_.EC.95.88.EC.97.90.EC.84.9C_XML_.EB.AC.B8.EC.84.9C_.ED.8F.89.EA.B0.80">확장기능 안에서 XML 문서 평가</h3>

<p>다음은 예로 <a class="external" rel="freelink">chrome://yourextension/content/peopleDB.xml에</a> 자리한 XML 문서를 씁니다.</p>

<pre class="notranslate">&lt;?xml version="1.0"?&gt;
&lt;people xmlns:xul = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" &gt;
  &lt;person&gt;
	&lt;name first="george" last="bush" /&gt;
	&lt;address street="1600 pennsylvania avenue" city="washington" country="usa"/&gt;
	&lt;phoneNumber&gt;202-456-1111&lt;/phoneNumber&gt;
  &lt;/person&gt;
  &lt;person&gt;
	&lt;name first="tony" last="blair" /&gt;
	&lt;address street="10 downing street" city="london" country="uk"/&gt;
	&lt;phoneNumber&gt;020 7925 0918&lt;/phoneNumber&gt;
  &lt;/person&gt;
&lt;/people&gt;
</pre>

<p>확장기능 안에서 XML 문서의 컨텐트를 쓸 수 있게, 우리는 문서를 로드하는 동시에 변수 <code>xmlDoc</code>를 우리가 <code>evaluate</code> 메소드를 쓸 수 있는 <code><a href="ko/XMLDocument">XMLDocument</a></code> 개체로 문서에 포함하는 <code><a href="ko/XMLHttpRequest">XMLHttpRequest</a></code> 개체를 만듭니다,</p>

<p>JavaScript는 확장기능 xul/js 문서에 씁니다.</p>

<pre class="notranslate">var req = new XMLHttpRequest();

req.open("GET", "chrome://yourextension/content/peopleDB.xml", false);
req.send(null);

var xmlDoc = req.responseXML;

var nsResolver = xmlDoc.createNSResolver( xmlDoc.ownerDocument == null ? xmlDoc.documentElement : xmlDoc.ownerDocument.documentElement);

var personIterator = xmlDoc.evaluate('//person', xmlDoc, nsResolver, XPathResult.ANY_TYPE, null );
</pre>

<h2 id=".EB.B6.80.EB.A1.9D" name=".EB.B6.80.EB.A1.9D">부록</h2>

<h4 id=".EC.82.AC.EC.9A.A9.EC.9E.90_.EC.A0.95.EC.9D.98_Namespace_Resolver_.EA.B5.AC.ED.98.84" name=".EC.82.AC.EC.9A.A9.EC.9E.90_.EC.A0.95.EC.9D.98_Namespace_Resolver_.EA.B5.AC.ED.98.84">사용자 정의 Namespace Resolver 구현</h4>

<p>이는 단지 설명을 위한 예입니다. 이 함수는 <code>xpathExpression</code>에서 namespace 접두사를 취할 필요가 있고 그 접두사와 들어맞는 URI를 반환합니다. 예를 들어, 다음 식은</p>

<pre class="notranslate">'//xhtml:td/mathml:math'
</pre>

<p>(X)HTML 표 데이터 셀 요소의 자식인 모든 <a href="ko/MathML">MathML</a> 식을 선택합니다.</p>

<p><code>mathml:</code> 접두사를 namespace URI '<code><a class="external" href="http://www.w3.org/1998/Math/MathML" rel="freelink">http://www.w3.org/1998/Math/MathML</a></code>'와 <code>html:</code>을 URI <code><a class="external" href="http://www.w3.org/1999/xhtml" rel="freelink">http://www.w3.org/1999/xhtml</a></code>와 관련시키기 위해 우리는 함수 하나를 제공합니다.</p>

<pre class="notranslate">function nsResolver(prefix) {
  var ns = {
    'xhtml' : 'http://www.w3.org/1999/xhtml',
    'mathml': 'http://www.w3.org/1998/Math/MathML'
  };
  return ns[prefix] || null;
}
</pre>

<p>그러면 <code>document.evaluate</code> 호출은 다음과 같습니다.</p>

<pre class="notranslate">document.evaluate( '//xhtml:td/mathml:math', document, nsResolver, XPathResult.ANY_TYPE, null );
</pre>

<h4 id="XPathResult_.EC.A0.95.EC.9D.98_.EC.83.81.EC.88.98" name="XPathResult_.EC.A0.95.EC.9D.98_.EC.83.81.EC.88.98">XPathResult 정의 상수</h4>

<table class="standard-table">
 <tbody>
  <tr>
   <td class="header">결과형 정의 상수</td>
   <td class="header"></td>
   <td class="header">설명</td>
  </tr>
  <tr>
   <td>ANY_TYPE</td>
   <td>0</td>
   <td>식 평가에서 자연스럽게 생긴 어떤 형을 포함하는 결과 집합. 만약 결과가 node-set이면 UNORDERED_NODE_ITERATOR_TYPE이 항상 결과형임을 주의하세요.</td>
  </tr>
  <tr>
   <td>NUMBER_TYPE</td>
   <td>1</td>
   <td>single 숫자를 포함하는 결과. 이는 예를 들어, <code>count()</code> 함수를 쓰는 XPath 식에 쓸모가 있습니다.</td>
  </tr>
  <tr>
   <td>STRING_TYPE</td>
   <td>2</td>
   <td>single 문자열을 포함하는 결과.</td>
  </tr>
  <tr>
   <td>BOOLEAN_TYPE</td>
   <td>3</td>
   <td>single boolean 값을 포함하는 결과. 이는 예를 들어, <code>not()</code> 함수를 쓰는 XPath 식에 쓸모가 있습니다.</td>
  </tr>
  <tr>
   <td>UNORDERED_NODE_ITERATOR_TYPE</td>
   <td>4</td>
   <td>식과 일치하는 모든 노드를 포함하는 결과 node-set. 노드는 반드시 문서에 나타나는 순서대로가 아닐지도 모릅니다.</td>
  </tr>
  <tr>
   <td>ORDERED_NODE_ITERATOR_TYPE</td>
   <td>5</td>
   <td>식과 일치하는 모든 노드를 포함하는 결과 node-set. 결과 집합의 노드는 문서에 나타나는 순서대로입니다.</td>
  </tr>
  <tr>
   <td>UNORDERED_NODE_SNAPSHOT_TYPE</td>
   <td>6</td>
   <td>식과 일치하는 모든 노드의 snapshot을 포함하는 결과 node-set. 노드는 반드시 문서에 나타나는 순서대로가 아닐지도 모릅니다.</td>
  </tr>
  <tr>
   <td>ORDERED_NODE_SNAPSHOT_TYPE</td>
   <td>7</td>
   <td>식과 일치하는 모든 노드의 snapshot을 포함하는 결과 node-set. 결과 집합의 노드는 문서에 나타나는 순서대로입니다.</td>
  </tr>
  <tr>
   <td>ANY_UNORDERED_NODE_TYPE</td>
   <td>8</td>
   <td>식과 일치하는 어떤 단일 노드를 포함하는 결과 node-set. 노드는 식과 일치하는 문서의 첫 노드일 필요는 없습니다.</td>
  </tr>
  <tr>
   <td>FIRST_ORDERED_NODE_TYPE</td>
   <td>9</td>
   <td>식과 일치하는 문서의 첫 노드를 포함하는 결과 node-set.</td>
  </tr>
 </tbody>
</table>

<div class="originaldocinfo">
<h2 id=".EC.9B.90.EB.B3.B8_.EB.AC.B8.EC.84.9C_.EC.A0.95.EB.B3.B4" name=".EC.9B.90.EB.B3.B8_.EB.AC.B8.EC.84.9C_.EC.A0.95.EB.B3.B4">원본 문서 정보</h2>

<ul>
 <li>원본 문서 <a class="external" href="http://www-xray.ast.cam.ac.uk/~jgraham/mozilla/xpath-tutorial.html">Mozilla XPath 입문서</a>를 기반으로 함</li>
 <li>원본 소스 저자: James Graham.</li>
 <li>다른 기여자: James Thompson.</li>
 <li>맨 나중 업데이트: 2006-3-25.</li>
</ul>
</div>

<p>{{ languages( { "en": "en/Introduction_to_using_XPath_in_JavaScript" } ) }}</p>