aboutsummaryrefslogtreecommitdiff
path: root/files/ru/web/api/domparser/index.html
blob: 59f9553959e0f08b888f513c697508bc2d2ad25c (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
---
title: DOMParser
slug: Web/API/DOMParser
tags:
  - API
  - DOM
  - XML
  - Экспериментальное
translation_of: Web/API/DOMParser
---
<p>{{APIRef("DOM")}}{{SeeCompatTable}}</p>

<p><code>DOMParser</code> может парсить XML или HTML источник содержащийся в строке в DOM <a href="/en-US/docs/DOM/document" title="document">Document</a>. Спецификация <code>DOMParser находится в</code> <a href="https://w3c.github.io/DOM-Parsing/">DOM Parsing and Serialization</a>.</p>

<p>Заметьте, что <a href="/en-US/docs/DOM/XMLHttpRequest" title="DOM/XMLHttpRequest">XMLHttpRequest</a> поддерживает парсинг XML и HTML из интернет ресурсов (по ссылке)</p>

<h2 id="Создание_DOMParser">Создание DOMParser</h2>

<p>Для того чтобы создать <code>DOMParser</code> просто используйте <code>new DOMParser()</code>.</p>

<p>Для большей информации о создании <code>DOMParser</code> в расширениях Firefox, пожалуйста прочитайте документацию : <a href="/en-US/docs/nsIDOMParser" title="nsIDOMParser"><code>nsIDOMParser</code></a>.</p>

<h2 id="Парсинг_XML">Парсинг XML</h2>

<p>Как только вы создали объект парсера, вы можете парсить XML из строки, используя метод <code>parseFromString</code>:</p>

<pre class="brush: js">var parser = new DOMParser();
var doc = parser.parseFromString(stringContainingXMLSource, "application/xml");
</pre>

<h3 id="Error_handling">Обработка ошибок</h3>

<p>Заметьте, если процесс парсинга не удастся , <code>DOMParser</code> теперь не выдаёт исключение, но вместо этого выдаёт документ ошибки (see {{Bug(45566)}}):</p>

<pre class="brush:xml">&lt;parsererror xmlns="http://www.mozilla.org/newlayout/xml/parsererror.xml"&gt;
(Описание ошибки)
&lt;sourcetext&gt;(отрывок XML документа)&lt;/sourcetext&gt;
&lt;/parsererror&gt;
</pre>

<p>Ошибки синтаксического анализа также сообщаются в <a href="/en-US/docs/Error_Console" title="Error Console">консоль ошибок</a>, с идентификатором URI документа (см. Ниже) в качестве источника ошибки.</p>

<h2 id="Разбор_SVG_или_HTML">Разбор SVG или HTML</h2>

<p><code>DOMParser</code> так же может быть использован для разбора SVG документа {{geckoRelease("10.0")}} или HTML документа {{geckoRelease("12.0")}}. На выходе возможны 3 варианта, в зависимости от переданного MIME типа. Если MIME тип передан как <code>text/xml</code>, результирующий объект будет типа <code>XMLDocument</code>, если <code>image/svg+xml</code>, соответственно <code>SVGDocument,</code> а для MIME типа <code>text/html<font face="Open Sans, Arial, sans-serif"> - </font></code><code>HTMLDocument</code>.</p>

<pre class="brush: js">var parser = new DOMParser();
var doc = parser.parseFromString(stringContainingXMLSource, "application/xml");
// возвращает Document, но не SVGDocument или HTMLDocument

parser = new DOMParser();
doc = parser.parseFromString(stringContainingXMLSource, "image/svg+xml");
// возвращает SVGDocument, который так же является экземпляром класса Document.

parser = new DOMParser();
doc = parser.parseFromString(stringContainingHTMLSource, "text/html");
// возвращает  HTMLDocument, который так же является экземпляром класса Document.
</pre>

<h3 id="DOMParser_HTML_для_устаревших_браузеров">DOMParser HTML для устаревших браузеров</h3>

<pre class="brush: js">/*
 * DOMParser HTML extension
 * 2012-09-04
 *
 * By Eli Grey, http://eligrey.com
 * Public domain.
 * КОД РАСПРОСТРАНЯЕТСЯ БЕЗ КАКИХ ЛИБО ГАРАНТИЙ. ИСПОЛЬЗУЙТЕ НА СВОЙ СТРАХ И РИСК.
 */

/*! @source https://gist.github.com/1129031 */
/*global document, DOMParser*/

(function(DOMParser) {
	"use strict";

	var
	  proto = DOMParser.prototype
	, nativeParse = <span style="font-size: 1rem;">proto</span><span style="font-size: 1rem;">.parseFromString</span>
	;

	// Firefox/Opera/IE throw errors on unsupported types
	try {
		// WebKit returns null on unsupported types
		if ((new DOMParser()).parseFromString("", "text/html")) {
			// text/html parsing is natively supported
			return;
		}
	} catch (ex) {}

	<span style="font-size: 1rem;">proto</span><span style="font-size: 1rem;">.parseFromString = function(markup, type) {</span>
		if (/^\s*text\/html\s*(?:;|$)/i.test(type)) {
			var
			  doc = document.implementation.createHTMLDocument("")
			;
	      		if (markup.toLowerCase().indexOf('&lt;!doctype') &gt; -1) {
        			doc.documentElement.innerHTML = markup;
      			}
      			else {
        			doc.body.innerHTML = markup;
      			}
			return doc;
		} else {
			return <span style="font-size: 1rem;">nativeParse</span><span style="font-size: 1rem;">.apply(this, arguments);</span>
		}
	};
}(DOMParser));
</pre>

<h3 id="DOMParser_from_ChromeJSMXPCOMPrivileged_Scope">DOMParser from Chrome/JSM/XPCOM/Privileged Scope</h3>

<p>Смотрите статью по ссылке: <a href="/en-US/docs/nsIDOMParser">nsIDOMParser</a></p>

<h2 id="Спецификации">Спецификации</h2>

{{Specifications}}

<h2 id="Browser_compatibility">Поддержка браузерами</h2>

<p>{{Compat("api.DOMParser", 3)}}</p>

<h2 id="See_also">Смотрите также</h2>

<ul>
 <li><a href="/en-US/docs/Parsing_and_serializing_XML" title="Parsing_and_serializing_XML">Анализ и сериализация XML</a></li>
 <li><a href="/en-US/docs/DOM/XMLHttpRequest" title="DOM/XMLHttpRequest">XMLHttpRequest</a></li>
 <li><a href="/en-US/docs/XMLSerializer" title="XMLSerializer">XMLSerializer</a></li>
 <li><a href="/en-US/Add-ons/Code_snippets/HTML_to_DOM">Parsing HTML to DOM</a></li>
</ul>