C xmldocument: XmlDocument Класс (System.Xml) | Microsoft Docs

Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅

C# ΠΈ .NET | Π Π°Π±ΠΎΡ‚Π° с XML

XML-Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Ρ‹

ПослСднСС обновлСниС: 14.10.2019

На сСгодняшний дСнь XML являСтся ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· распространСнных стандартов Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволяСт Π² ΡƒΠ΄ΠΎΠ±Π½ΠΎΠΉ Ρ„ΠΎΡ€ΠΌΠ΅ ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒ слоТныС ΠΏΠΎ структурС Π΄Π°Π½Π½Ρ‹Π΅.
ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ .NET Π²ΠΊΠ»ΡŽΡ‡ΠΈΠ»ΠΈ Π² Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊ ΡˆΠΈΡ€ΠΎΠΊΠΈΠ΅ возмоТности для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с XML.

ΠŸΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ нСпосрСдствСнно ΠΊ Ρ€Π°Π±ΠΎΡ‚Π΅ с XML-Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ, сначала рассмотрим, Ρ‡Ρ‚ΠΎ прСдставляСт собой xml-Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ ΠΈ ΠΊΠ°ΠΊ ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Π½Π° c#.

НапримСр, Ρƒ нас Π΅ΡΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ класс:


class User
{
    public string Name { get; set; }
    public int Age { get; set; }
    public string Company { get; set; }
}

Π’ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Π½Π° C# ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ список ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² класса User:


User user1 = new User { Name = "Bill Gates", Age = 48, Company = "Microsoft" };
User user2 = new User { Name = "Larry Page", Age = 42, Company = "Google" };
List<User> users = new List<User> { user1, user2 };

Π§Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ список Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ xml ΠΌΡ‹ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ xml-Ρ„Π°ΠΉΠ»:


<?xml version="1. 0" encoding="utf-8" ?>
<users>
  <user name="Bill Gates">
    <company>Microsoft</company>
    <age>48</age>
  </user>
  <user name="Larry Page">
    <company>Google</company>
    <age>48</age>
  </user>
</users>

XML-Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚ строка <?xml version="1.0" encoding="utf-8" ?>. Она Π·Π°Π΄Π°Π΅Ρ‚ Π²Π΅Ρ€ΡΠΈΡŽ (1.0) ΠΈ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΡƒ (utf-8) xml. Π”Π°Π»Π΅Π΅ ΠΈΠ΄Π΅Ρ‚
собствСнно содСрТимоС Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°.

XML-Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½ СдинствСнный ΠΊΠΎΡ€Π½Π΅Π²ΠΎΠΉ элСмСнт, Π²Π½ΡƒΡ‚Ρ€ΡŒ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΏΠΎΠΌΠ΅Ρ‰Π°ΡŽΡ‚ΡΡ всС ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ элСмСнты. Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС Ρ‚Π°ΠΊΠΈΠΌ элСмСнтом являСтся
элСмСнт <users>. Π’Π½ΡƒΡ‚Ρ€ΠΈ ΠΊΠΎΡ€Π½Π΅Π²ΠΎΠ³ΠΎ элСмСнта <users> Π·Π°Π΄Π°Π½ Π½Π°Π±ΠΎΡ€ элСмСнтов <user>. Π’Π½Π΅ ΠΊΠΎΡ€Π½Π΅Π²ΠΎΠ³ΠΎ элСмСнта
ΠΌΡ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ Ρ€Π°Π·ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ элСмСнты user.

ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ элСмСнт опрСдСляСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰Π΅Π³ΠΎ ΠΈ Π·Π°ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰Π΅Π³ΠΎ Ρ‚Π΅Π³ΠΎΠ², Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, <user> ΠΈ </user>, Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ…
помСщаСтся Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ содСрТимоС элСмСнтов. Π’Π°ΠΊΠΆΠ΅ элСмСнт ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ сокращСнноС объявлСниС: <user /> — Π² ΠΊΠΎΠ½Ρ†Π΅ элСмСнта помСщаСтся слСш.

Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ элСмСнты ΠΈ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹. Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ элСмСнт user ΠΈΠΌΠ΅Π΅Ρ‚ Π΄Π²Π° Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… элСмСнта company ΠΈ
age ΠΈ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ name.

Атрибуты ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ΡΡ Π² Ρ‚Π΅Π»Π΅ элСмСнта ΠΈ ΠΈΠΌΠ΅ΡŽΡ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ Ρ„ΠΎΡ€ΠΌΡƒ: Π½Π°Π·Π²Π°Π½ΠΈΠ΅="Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅". НапримСр, <user name="Bill Gates">,
Π² Π΄Π°Π½Π½ΠΎΠΌ случаС Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ называСтся name ΠΈ ΠΈΠΌΠ΅Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Bill Gates

Π’Π½ΡƒΡ‚Ρ€ΠΈ простых элСмСнтов помСщаСтся ΠΈΡ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. НапримСр, <company>Google</company> — элСмСнт company ΠΈΠΌΠ΅Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅
Google.

Названия элСмСнтов ΡΠ²Π»ΡΡŽΡ‚ΡΡ рСгистрозависимыми, поэтому <company> ΠΈ <COMPANY> Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ Ρ€Π°Π·Π½Ρ‹Π΅ элСмСнты.

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, вСсь список Users ΠΈΠ· ΠΊΠΎΠ΄Π° C# сопоставляСтся с ΠΊΠΎΡ€Π½Π΅Π²Ρ‹ΠΌ элСмСнтом <users>, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ User — с элСмСнтом <user>,
Π° ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ свойство ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° User — с Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠΌ ΠΈΠ»ΠΈ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΌ элСмСнтом элСмСнта <user>

Π§Ρ‚ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для свойств — Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ элСмСнты ΠΈΠ»ΠΈ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹? Π­Ρ‚ΠΎ вопрос ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚Π΅Π½ΠΈΠΉ — ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹, Ρ‚Π°ΠΊ ΠΈ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ элСмСнты.
Π’Π°ΠΊ, Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π²ΠΏΠΎΠ»Π½Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ вмСсто Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΉ элСмСнт:


<?xml version="1.0" encoding="utf-8" ?>
<users>
  <user>
	<name>Bill Gates</name>
    <company>Microsoft</company>
    <age>48</age>
  </user>
  <user>
	<name>Larry Page</name>
    <company>Google</company>
    <age>48</age>
  </user>
</users>

Π’Π΅ΠΏΠ΅Ρ€ΡŒ рассмотрим основныС ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Ρ‹ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с XML, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ΡΡ Π² C#.

ΠŸΡ€ΡΠΌΠ°Ρ ΠΈ обратная ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° XML — Руководства Web-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°

Иногда Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ Π² ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅Β XML ΠΈ Π² ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΠΊΠΎΠ½Π²Π΅Ρ€Ρ‚Π°Ρ†ΠΈΠΈ Π² Π΄Ρ€Π΅Π²ΠΎ DOM. Или Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚,Β Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ пСрСвСсти Π΄Ρ€Π΅Π²ΠΎΒ DOM Π² XML. Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ рассмотрим ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ web для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ XML.

XMLSerializer
Π‘Π΅Ρ€ΠΈΠ°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ Π΄Π΅Ρ€Π΅Π²ΡŒΡ DOM, прСобразуя ΠΈΡ… Π² строки, содСрТащиС XML.
DOMParser
Π‘ΠΎΠ·Π΄Π°Ρ‘Ρ‚ Π΄Π΅Ρ€Π΅Π²ΠΎ DOM, анализируя строку, ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‰ΡƒΡŽ XML, возвращая XMLDocument (en-US) ΠΈΠ»ΠΈ Document Π² зависимости ΠΎΡ‚ входящих данных.
XMLHttpRequest
Π—Π°Π³Ρ€ΡƒΠΆΠ°Π΅Ρ‚ ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚ ΠΈΠ· URL-адрСса; Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠΈΠΌΠΎΠ΅ XML возвращаСтся ΠΊΠ°ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ XML Document с Π΄Π΅Ρ€Π΅Π²ΠΎΠΌ DOM, построСнным ΠΈΠ· самого XML.
XPath
ВСхнология создания строк, содСрТащих адрСса для ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹Ρ… частСй Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° XML, ΠΈ поиска ΡƒΠ·Π»ΠΎΠ² XML Π½Π° основС этих адрСсов.

ИспользованиС ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΎΠ² для создания XML-Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° (ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ являСтся экзСмпляром Document.

Parsing строк Π² Π΄Π΅Ρ€Π΅Π²ΠΎ DOM

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ XML Π² строкС прСобразуСтся Π² Π΄Π΅Ρ€Π΅Π²ΠΎ DOM с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ DOMParser:

var sMyString = '<a><b>hey!</b></a>';
var oParser = new DOMParser();
var oDOM = oParser.parseFromString(sMyString, "application/xml");

console. log(oDOM.documentElement.nodeName == "parsererror" ? "error while parsing" : oDOM.documentElement.nodeName);

Parsing URL-addressable рСсурсов Π² Π΄Π΅Ρ€Π΅Π²ΠΎ DOM

ИспользованиС XMLHttpRequest

Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΠ΄Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ считываСт ΠΈ Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ XML-Ρ„Π°ΠΉΠ» с URL-адрСсом Π² Π΄Π΅Ρ€Π΅Π²Π΅ DOM:

var xhr = new XMLHttpRequest();
xhr.onload = function() {
  dump(xhr.responseXML.documentElement.nodeName);
}
xhr.onerror = function() {
  dump("Error while getting XML.");
}
xhr.open("GET", "example.xml");
xhr.responseType = "document";
xhr.send();

Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ΅ Π² ΠΏΠΎΠ»Π΅ responseXML ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° xhr, являСтся Document, созданным ΠΏΡƒΡ‚Ρ‘ΠΌ синтаксичСского Π°Π½Π°Π»ΠΈΠ·Π° XML.

Если Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ прСдставляСт собой HTML, ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Π½Π½Ρ‹ΠΉ Π²Ρ‹ΡˆΠ΅ ΠΊΠΎΠ΄ Π²Π΅Ρ€Π½Ρ‘Ρ‚ Document. Если Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ XML, Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π½Π° самом Π΄Π΅Π»Π΅ являСтся XMLDocument (en-US). Π­Ρ‚ΠΈ Π΄Π²Π° Ρ‚ΠΈΠΏΠ° ΠΏΠΎ сущСству ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹; Ρ€Π°Π·Π½ΠΈΡ†Π° Π² основном историчСская, хотя диффСрСнциация ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚Π°ΠΊΠΆΠ΅ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ практичСскиС прСимущСства.

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: Π½Π° самом Π΄Π΅Π»Π΅ сущСствуСт интСрфСйс HTMLDocument, Π½ΠΎ это Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ нСзависимый Ρ‚ΠΈΠΏ. Π’ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π°Ρ… это Ρ‚Π°ΠΊ, Π° Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… это просто псСвдоним для интСрфСйса Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°.

ИмСя Document, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠ΅Ρ€ΠΈΠ°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π΅Ρ€Π΅Π²ΠΎ DOM Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ Π² XML с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° XMLSerializer.serializeToString ().

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Ρ‹ для сСриализации содСрТимого XML-Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°, созданного Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅.

Serializing DOM trees to strings

Π‘Π½Π°Ρ‡Π°Π»Π° создайтС Π΄Π΅Ρ€Π΅Π²ΠΎ DOM, ΠΊΠ°ΠΊ описано Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ Как ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π΄Π΅Ρ€Π΅Π²ΠΎ DOM. Π’ качСствС Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Π΄Π΅Ρ€Π΅Π²ΠΎ DOM, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½ΠΎΠ΅ ΠΈΠ· XMLHttpRequest.

Π§Ρ‚ΠΎΠ±Ρ‹ ΡΠ΅Ρ€ΠΈΠ°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ Π΄Π΅Ρ€Π΅Π²Π° DOM Π² тСкст XML, Π²Ρ‹Π·ΠΎΠ²ΠΈΡ‚Π΅ XMLSerializer.serializeToString ():

var oSerializer = new XMLSerializer();
var sXML = oSerializer.serializeToString(doc);

Serializing HTML documents

Если Ρƒ вас Π΅ΡΡ‚ΡŒ модСль DOM Π² Π²ΠΈΠ΄Π΅ HTML-Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠ΅Ρ€ΠΈΠ°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Ρ‘ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ serializeToString (), Π½ΠΎ Π΅ΡΡ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ простой Π²Π°Ρ€ΠΈΠ°Π½Ρ‚: просто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ свойство Element. innerHTML (Ссли Π²Π°ΠΌ Π½ΡƒΠΆΠ½Ρ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎΡ‚ΠΎΠΌΠΊΠΈ ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ ΡƒΠ·Π΅Π») ΠΈΠ»ΠΈ свойство Element.outerHTML, Ссли Π²Π°ΠΌ Π½ΡƒΠΆΠ΅Π½ ΡƒΠ·Π΅Π» ΠΈ всС Π΅Π³ΠΎ ΠΏΠΎΡ‚ΠΎΠΌΠΊΠΈ.

var docHTML = document.documentElement.innerHTML;

Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ docHTML прСдставляСт собой DOMString, содСрТащий HTML-ΠΊΠΎΠ΄ содСрТимого Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°; Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ содСрТимоС элСмСнта <body>.

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ HTML, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ <body> ΠΈ Π΅Π³ΠΎ ΠΏΠΎΡ‚ΠΎΠΌΠΊΠ°ΠΌ, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ этого ΠΊΠΎΠ΄Π°:

var docHTML = document.documentElement.outerHTML;

PostgreSQL : ДокумСнтация: 9.6: 8.13. Π’ΠΈΠΏ XML : Компания Postgres Professional

Π’ΠΈΠΏ xml ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ для хранСния XML-Π΄Π°Π½Π½Ρ‹Ρ…. Π•Π³ΠΎ прСимущСство ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌ Ρ‚ΠΈΠΏΠΎΠΌ text Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ провСряСт Π²Π²ΠΎΠ΄ΠΈΠΌΡ‹Π΅ значСния Π½Π° Π΄ΠΎΠΏΡƒΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ ΠΏΠΎ ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌ XML ΠΈ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π½ΠΈΠΌ Π΅ΡΡ‚ΡŒ типобСзопасныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ; см. Π Π°Π·Π΄Π΅Π»Β 9.14. Для использования этого Ρ‚ΠΈΠΏΠ° дистрибутив Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ скомпилирован Π² ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ configure --with-libxml.

Π’ΠΈΠΏ xml ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ ΠΎΡ„ΠΎΡ€ΠΌΠ»Π΅Π½Π½Ρ‹Π΅ Β«Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Ρ‹Β», Π² соотвСтствии со стандартом XML, Π° Ρ‚Π°ΠΊΠΆΠ΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ «содСрТимого», опрСдСляСмыС ΠΊΠ°ΠΊ ΠΌΠ΅Π½Π΅Π΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½Ρ‹Π΅ Β«ΡƒΠ·Π»Ρ‹ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Β» Π² ΠΌΠΎΠ΄Π΅Π»ΠΈ Π΄Π°Π½Π½Ρ‹Ρ… XQuery ΠΈ XPath. Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, это ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π²ΠΎ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π°Ρ… содСрТимого ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ нСсколько элСмСнтов Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ уровня ΠΈΠ»ΠΈ тСкстовых ΡƒΠ·Π»ΠΎΠ². ЯвляСтся Π»ΠΈ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ° xml ΠΏΠΎΠ»Π½Ρ‹ΠΌ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ ΠΈΠ»ΠΈ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ΠΎΠΌ содСрТимого, позволяСт ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ xml-Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ IS DOCUMENT.

8.13.1. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ XML-Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ° xml ΠΈΠ· тСкстовой строки, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ xmlparse:

XMLPARSE ( { DOCUMENT | CONTENT } value)

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹:

XMLPARSE (DOCUMENT '<?xml version="1.0"?><book><title>Manual</title><chapter>...</chapter></book>')
XMLPARSE (CONTENT 'abc<foo>bar</foo><bar>foo</bar>')

Π₯отя Π² стандартС SQL описан Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ способ прСобразования тСкстовых строк Π² XML-значСния, спСцифичСский синтаксис PostgreSQL:

xml '<foo>bar</foo>'
'<foo>bar</foo>'::xml

Ρ‚ΠΎΠΆΠ΅ допустим.

Π’ΠΈΠΏ xml Π½Π΅ провСряСт Π²Π²ΠΎΠ΄ΠΈΠΌΡ‹Π΅ значСния ΠΏΠΎ схСмС DTD (Document Type Declaration, ОбъявлСния Ρ‚ΠΈΠΏΠ° Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°), Π΄Π°ΠΆΠ΅ Ссли Π² Π½ΠΈΡ… ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚ ссылка Π½Π° DTD. Π’ настоящСС врСмя Π² PostgreSQL Ρ‚Π°ΠΊΠΆΠ΅ Π½Π΅Ρ‚ встроСнной ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… разновидностСй схСм, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ XML Schema.

ΠžΠ±Ρ€Π°Ρ‚Π½Π°Ρ опСрация, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ тСкстовой строки ΠΈΠ· xml, выполняСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ xmlserialize:

XMLSERIALIZE ( { DOCUMENT | CONTENT } Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ AS Ρ‚ΠΈΠΏ )

Π—Π΄Π΅ΡΡŒ допустимый Ρ‚ΠΈΠΏ β€” character, character varying ΠΈΠ»ΠΈ text (ΠΈΠ»ΠΈ ΠΈΡ… псСвдонимы). И Π² Π΄Π°Π½Π½ΠΎΠΌ случаС стандарт SQL прСдусматриваСт Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ способ прСобразования xml Π² Ρ‚ΠΈΠΏ тСкстовых строк, Π½ΠΎ PostgreSQL позволяСт просто привСсти Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΊ Π½ΡƒΠΆΠ½ΠΎΠΌΡƒ Ρ‚ΠΈΠΏΡƒ.

ΠŸΡ€ΠΈ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠΈ тСкстовой строки Π² Ρ‚ΠΈΠΏ xml ΠΈΠ»ΠΈ Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚ Π±Π΅Π· использования Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ XMLPARSE ΠΈ XMLSERIALIZE, Π²Ρ‹Π±ΠΎΡ€ Ρ€Π΅ΠΆΠΈΠΌΠ° DOCUMENT ΠΈΠ»ΠΈ CONTENT опрСдСляСтся ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ сСанса Β«XML optionΒ», ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ стандартной ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ:

SET XML OPTION { DOCUMENT | CONTENT };

ΠΈΠ»ΠΈ Ρ‚Π°ΠΊΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ Π² Π΄ΡƒΡ…Π΅ PostgreSQL:

SET xmloption TO { DOCUMENT | CONTENT };

По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ этот ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ ΠΈΠΌΠ΅Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ CONTENT, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Π΄ΠΎΠΏΡƒΡΠΊΠ°ΡŽΡ‚ΡΡ всС Ρ„ΠΎΡ€ΠΌΡ‹ XML-Π΄Π°Π½Π½Ρ‹Ρ….

8.13.2. ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠΈ

Если Π½Π° сторонС сСрвСра ΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° ΠΈ Π² XML-Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Ρ€Π°Π·Π½Ρ‹Π΅ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠΈ символов, с этим ΠΌΠΎΠ³ΡƒΡ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹. Когда запросы ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ Π½Π° сСрвСр, Π° ΠΈΡ… Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ΡΡ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρƒ Π² ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΌ тСкстовом Ρ€Π΅ΠΆΠΈΠΌΠ΅, PostgreSQL ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ всС ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΡ‹Π΅ тСкстовыС Π΄Π°Π½Π½Ρ‹Π΅ Π² ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΡƒ для ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ стороны; см. Π Π°Π·Π΄Π΅Π»Β 23.3. Π’ Ρ‚ΠΎΠΌ числС это происходит ΠΈ со строковыми прСдставлСниями XML-Π΄Π°Π½Π½Ρ‹Ρ…, ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΌΠΈ Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠΊΠ°Π·Π°Π½Ρ‹ Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΡ… ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ…. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ это ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ объявлСния ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠΈ, содСрТащиСся Π² XML-Π΄Π°Π½Π½Ρ‹Ρ…, ΠΌΠΎΠ³ΡƒΡ‚ Π½Π΅ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, ΠΊΠΎΠ³Π΄Π° тСкстовая строка прСобразуСтся ΠΈΠ· ΠΎΠ΄Π½ΠΎΠΉ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠΈ Π² Π΄Ρ€ΡƒΠ³ΡƒΡŽ ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π΅ Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠΌ ΠΈ сСрвСром, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Π΅ Π²ΠΊΠ»ΡŽΡ‡Ρ‘Π½Π½Ρ‹Π΅ Π² Π΄Π°Π½Π½Ρ‹Π΅ объявлСния Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Ρ‹ автоматичСски. Для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ этой ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ объявлСния ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠΈ, содСрТащиСся Π² тСкстовых строках, Π²Π²ΠΎΠ΄ΠΈΠΌΡ‹Ρ… Π² Ρ‚ΠΈΠΏ xml, просто ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΡƒΡŽΡ‚ΡΡ ΠΈ прСдполагаСтся, Ρ‡Ρ‚ΠΎ XML-содСрТимоС прСдставлСно Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠ΅ сСрвСра. Как слСдствиС, для ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠΉ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Ρ‚Π°ΠΊΠΈΡ… строк с XML-Π΄Π°Π½Π½Ρ‹ΠΌΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ ΠΈΡ… Π² своСй Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠ΅. Для сСрвСра Π½Π΅ Π²Π°ΠΆΠ½ΠΎ, Π±ΡƒΠ΄Π΅Ρ‚ Π»ΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ для этого ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Ρ‹ Π² свою ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΡƒ, ΠΈΠ»ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ Π΅Ρ‘, ΠΏΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ Π΅ΠΌΡƒ Π΄Π°Π½Π½Ρ‹Π΅. ΠŸΡ€ΠΈ Π²Ρ‹Π²ΠΎΠ΄Π΅ значСния Ρ‚ΠΈΠΏΠ° xml Π½Π΅ содСрТат объявлСния ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠΈ, Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ всС Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΠΎΡΡ‚ΡƒΠΏΠ°ΡŽΡ‚ Π² Π΅Π³ΠΎ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠ΅.

Если ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ запроса ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ Π½Π° сСрвСр ΠΈ ΠΎΠ½ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρƒ Π² Π΄Π²ΠΎΠΈΡ‡Π½ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅, ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠ° символов Π½Π΅ прСобразуСтся, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ другая ситуация. Π’ этом случаС объявлСниС ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠΈ Π² XML принимаСтся Π²ΠΎ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Π° Ссли Π΅Π³ΠΎ Π½Π΅Ρ‚, Ρ‚ΠΎ прСдполагаСтся, Ρ‡Ρ‚ΠΎ Π΄Π°Π½Π½Ρ‹Π΅ Π·Π°ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ Π² UTF-8 (это соотвСтствуСт стандарту XML; Π·Π°ΠΌΠ΅Ρ‚ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ PostgreSQL Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ UTF-16). ΠŸΡ€ΠΈ Π²Ρ‹Π²ΠΎΠ΄Π΅ Π² Π΄Π°Π½Π½Ρ‹Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΎ объявлСниС ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠΈ, Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠΉ Π½Π° сторонС ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° (Π½ΠΎ Ссли это UTF-8, объявлСниС Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡƒΡ‰Π΅Π½ΠΎ).

Π‘Π°ΠΌΠΎ собой, XML-Π΄Π°Π½Π½Ρ‹Π΅ Π² PostgreSQL Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒΡΡ Π³ΠΎΡ€Π°Π·Π΄ΠΎ эффСктивнСС, ΠΊΠΎΠ³Π΄Π° ΠΈ Π² XML-Π΄Π°Π½Π½Ρ‹Ρ…, ΠΈ Π½Π° сторонС ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°, ΠΈ Π½Π° сторонС сСрвСра ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΎΠ΄Π½Π° ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠ°. Π’Π°ΠΊ ΠΊΠ°ΠΊ Π²Π½ΡƒΡ‚Ρ€ΠΈ XML-Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ΡΡ Π² UTF-8, ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚, ΠΊΠΎΠ³Π΄Π° Π½Π° сСрвСрС Ρ‚Π°ΠΊΠΆΠ΅ Π²Ρ‹Π±Ρ€Π°Π½Π° ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠ° UTF-8.

Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅

НСкоторыС XML-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ способны Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ с ASCII-Π΄Π°Π½Π½Ρ‹ΠΌΠΈ, Ссли ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠ° сСрвСра Π½Π΅ UTF-8. Π’ частности, это извСстная ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ xpath().

8.13.3. ΠžΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ XML-значСниям

Π’ΠΈΠΏ xml отличаСтся ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ для Π½Π΅Π³ΠΎ Π½Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ Π½ΠΈΠΊΠ°ΠΊΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ сравнСния, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Ρ‡Ρ‘Ρ‚ΠΊΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½ΠΎΠ³ΠΎ ΠΈ ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° сравнСния XML-Π΄Π°Π½Π½Ρ‹Ρ… Π½Π΅ сущСствуСт. Одно ΠΈΠ· слСдствий этого β€” нСльзя ΠΎΡ‚Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ²Π°Ρ‚ΡŒ строки Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, сравнив столбСц xml с искомым Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ XML-значСния Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π΄ΠΎΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΌ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹ΠΌ ΠΏΠΎΠ»Π΅ΠΌ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ID. МоТно Ρ‚Π°ΠΊΠΆΠ΅ ΡΡ€Π°Π²Π½ΠΈΠ²Π°Ρ‚ΡŒ XML-значСния, ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π² ΠΈΡ… сначала Π² тСкстовыС строки, Π½ΠΎ Π·Π°ΠΌΠ΅Ρ‚ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ с ΡƒΡ‡Ρ‘Ρ‚ΠΎΠΌ спСцифики XML-Π΄Π°Π½Π½Ρ‹Ρ… этот ΠΌΠ΅Ρ‚ΠΎΠ΄ практичСски бСсполСзСн.

Из-Π·Π° отсутствия ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² сравнСния для Ρ‚ΠΈΠΏΠ° xml, для столбца этого Ρ‚ΠΈΠΏΠ° Ρ‚Π°ΠΊΠΆΠ΅ нСльзя ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ индСкс. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ, ΠΊΠΎΠ³Π΄Π° трСбуСтся быстрый поиск Π² XML Π΄Π°Π½Π½Ρ‹Ρ…, ΠΎΠ±ΠΎΠΉΡ‚ΠΈ это ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ½ΠΎ, привСдя Π΄Π°Π½Π½Ρ‹Π΅ ΠΊ Ρ‚ΠΈΠΏΡƒ тСкстовой строки ΠΈ проиндСксировав эти строки, Π»ΠΈΠ±ΠΎ проиндСксировав Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ XPath. ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ сам запрос ΠΏΡ€ΠΈ этом слСдуСт ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ поиск выполнялся ΠΏΠΎ индСксированному Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΡŽ.

Для ускорСния поиска Π² XML-Π΄Π°Π½Π½Ρ‹Ρ… Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ полнотСкстового поиска Π² PostgreSQL. Однако это Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½ΠΎΠΉ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‡Ρ‚ΠΎ дистрибутив PostgreSQL ΠΏΠΎΠΊΠ° Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚.

Π€Π°ΠΉΠ» import.xml





























































<ΠšΠΎΠΌΠΌΠ΅Ρ€Ρ‡Π΅ΡΠΊΠ°ΡΠ˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡ>НСтГлавный элСмСнт XML, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ ΠΏΠΎΠ΄Ρ‡ΠΈΠ½Π΅Π½Ρ‹ всС ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅. Π₯Ρ€Π°Π½ΠΈΡ‚ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ с ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ ΠΎ пространствС ΠΈΠΌΠ΅Π½, вСрсии схСмы («ВСрсияБхСмы»), Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ Π΄Π°Ρ‚Ρ‹ формирования («ДатаЀормирования») ΠΈ слуТСбной ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ.
<ΠšΠ»Π°ΡΡΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€><ΠšΠΎΠΌΠΌΠ΅Ρ€Ρ‡Π΅ΡΠΊΠ°ΡΠ˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡ>Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ содСрТит ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Π³Ρ€ΡƒΠΏΠΏΠ°Ρ…, свойствах, Ρ‚ΠΈΠΏΠ°Ρ… Ρ†Π΅Π½, складах, Π΅Π΄ΠΈΠ½ΠΈΡ†Π°Ρ… измСрСния. Π£ Π½Π΅Π³ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ Β«Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠΈΡ‚Π’ΠΎΠ»ΡŒΠΊΠΎΠ˜Π·ΠΌΠ΅Π½Π΅Π½ΠΈΡΒ», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π² Π½ΠΎΠ²ΠΎΠΉ схСмС ΠΎΠ±ΠΌΠ΅Π½Π° Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ, Ρ‚. ΠΊ. ΠΎΠ½ бСсполСзСн ΠΏΡ€ΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚Π½ΠΎΠΌ ΠΎΠ±ΠΌΠ΅Π½Π΅.
<Ид><ΠšΠ»Π°ΡΡΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€>Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ содСрТит ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ, ΠΎ Ρ‚ΠΎΠΌ, ΠΊ ΠΊΠ°ΠΊΠΎΠΌΡƒ ΠΈΠ½Ρ„ΠΎΠ±Π»ΠΎΠΊΡƒ относится информация этого классификатора.
<НаимСнованиС><ΠšΠ»Π°ΡΡΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€>Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ содСрТит ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Π½Π°ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠΈ ΠΈΠ½Ρ„ΠΎΠ±Π»ΠΎΠΊΠ°, ΠΊ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ относится классификатор.
Β 
<Π“Ρ€ΡƒΠΏΠΏΡ‹><ΠšΠ»Π°ΡΡΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€>Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ содСрТит ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Π³Ρ€ΡƒΠΏΠΏΠ°Ρ… (Ρ€Π°Π·Π΄Π΅Π»Π°Ρ…) Ρ‚ΠΎΠ²Π°Ρ€ΠΎΠ².
<Π“Ρ€ΡƒΠΏΠΏΠ°><Π“Ρ€ΡƒΠΏΠΏΡ‹>Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ содСрТит описаниС Π³Ρ€ΡƒΠΏΠΏΡ‹ элСмСнта.
<Ид><Π“Ρ€ΡƒΠΏΠΏΠ°>Π£Π½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Π³Ρ€ΡƒΠΏΠΏΡ‹ (Ρ€Π°Π·Π΄Π΅Π»Π°).
<НомСрВСрсии><Π“Ρ€ΡƒΠΏΠΏΠ°>НомСр вСрсии элСмСнта Π³Ρ€ΡƒΠΏΠΏΡ‹ (Ρ€Π°Π·Π΄Π΅Π»Π°).
<ΠŸΠΎΠΌΠ΅Ρ‚ΠΊΠ°Π£Π΄Π°Π»Π΅Π½ΠΈΡ><Π“Ρ€ΡƒΠΏΠΏΠ°>ΠŸΡ€ΠΈΠ·Π½Π°ΠΊ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ элСмСнт Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Π΄Π΅Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€ΠΎΠ²Π°Π½.
<НаимСнованиС><Π“Ρ€ΡƒΠΏΠΏΠ°>НаимСнованиС Π³Ρ€ΡƒΠΏΠΏΡ‹ (Ρ€Π°Π·Π΄Π΅Π»Π°).
<Π“Ρ€ΡƒΠΏΠΏΡ‹><Π“Ρ€ΡƒΠΏΠΏΠ°>ΠŸΠΎΠ΄Ρ‡ΠΈΠ½Π΅Π½Π½Ρ‹ΠΉ элСмСнт, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ…Ρ€Π°Π½ΠΈΡ‚ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ ΠΏΠΎΠ΄Ρ‡ΠΈΠ½Π΅Π½Π½Ρ‹Ρ… Π³Ρ€ΡƒΠΏΠΏΠ°Ρ…. Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° элСмСнта такая ΠΆΠ΅, ΠΊΠ°ΠΊ <Π“Ρ€ΡƒΠΏΠΏΡ‹> Ρƒ <ΠšΠ»Π°ΡΡΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€>.
Β 
<Бвойства><ΠšΠ»Π°ΡΡΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€>Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ содСрТит ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ свойствах Ρ‚ΠΎΠ²Π°Ρ€ΠΎΠ².
<Бвойство><Бвойства>Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ содСрТит описаниС свойства элСмСнта.
<Ид><Бвойство>Π£Π½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ свойства.
<НомСрВСрсии><Бвойство>НомСр вСрсии свойства.
<ΠŸΠΎΠΌΠ΅Ρ‚ΠΊΠ°Π£Π΄Π°Π»Π΅Π½ΠΈΡ><Бвойство>ΠŸΡ€ΠΈΠ·Π½Π°ΠΊ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ элСмСнт Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Π΄Π΅Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€ΠΎΠ²Π°Π½.
<НаимСнованиС><Бвойство>НаимСнованиС свойства.
<Π’Π½Π΅ΡˆΠ½ΠΈΠΉ><Бвойство>ΠŸΡ€ΠΈΠ·Π½Π°ΠΊ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ свойство Π΄ΠΎΠ»ΠΆΠ½ΠΎ хранится Π² справочникС (highload-Π±Π»ΠΎΠΊΠ΅). Если свойство Ρ…Ρ€Π°Π½ΠΈΡ‚ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ, Ρ‚ΠΎ ΠΏΡ€ΠΈΠ·Π½Π°ΠΊ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ true.
<Π’ΠΈΠΏΠ—Π½Π°Ρ‡Π΅Π½ΠΈΠΉ><Бвойство>Π’ΠΈΠΏ значСния свойства. Π’ΠΈΠΏ значСния ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ: Π‘Ρ‚Ρ€ΠΎΠΊΠ°, Число, Π‘ΠΏΡ€Π°Π²ΠΎΡ‡Π½ΠΈΠΊ.
<Π’Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹Π—Π½Π°Ρ‡Π΅Π½ΠΈΠΉ><Бвойство>Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ содСрТит ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π°Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, Ссли Ρ‚ΠΈΠΏ свойства Π‘ΠΏΡ€Π°Π²ΠΎΡ‡Π½ΠΈΠΊ.
<Π‘ΠΏΡ€Π°Π²ΠΎΡ‡Π½ΠΈΠΊ><Π’Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹Π—Π½Π°Ρ‡Π΅Π½ΠΈΠΉ>Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ содСрТит описаниС Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ свойства.
<Π˜Π΄Π—Π½Π°Ρ‡Π΅Π½ΠΈΡ><Π‘ΠΏΡ€Π°Π²ΠΎΡ‡Π½ΠΈΠΊ>Π˜Π΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° значСния свойства.
<Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅><Π‘ΠΏΡ€Π°Π²ΠΎΡ‡Π½ΠΈΠΊ>Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° значСния свойства.
<ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ°><Π‘ΠΏΡ€Π°Π²ΠΎΡ‡Π½ΠΈΠΊ>АдрСс ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠΈ, Ссли Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ свойства Ρ…Ρ€Π°Π½ΠΈΡ‚ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ.
<ΠšΠΎΠ΄Π“Ρ€ΡƒΠΏΠΏΡ‹Π’ΠΎΠ²Π°Ρ€ΠΎΠ²><ΠŸΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅>Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ содСрТит ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ ΠΊΠΎΠ΄Π΅ Π³Ρ€ΡƒΠΏΠΏΡ‹ Ρ‚ΠΎΠ²Π°Ρ€ΠΎΠ², ΠΏΠΎΠ΄Π»Π΅ΠΆΠ°Ρ‰ΠΈΡ… ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΉ

ΠΌΠ°Ρ€ΠΊΠΈΡ€ΠΎΠ²ΠΊΠ΅.


Π’ Π Π€ Π² соотвСтствии с Π€Π΅Π΄Π΅Ρ€Π°Π»ΡŒΠ½Ρ‹ΠΌ Π·Π°ΠΊΠΎΠ½ΠΎΠΌ ΠΎΡ‚ 31 дСкабря 2017 Π³. β„– 487-Π€Π— Ρ‚ΠΎΠ²Π°Ρ€Ρ‹ ΠΏΠΎΠ΄Π»Π΅ΠΆΠ°Ρ‚ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΌΠ°Ρ€ΠΊΠΈΡ€ΠΎΠ²ΠΊΠ΅, согласно ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½Π½ΠΎΠΌΡƒ ΠΏΠ΅Ρ€Π΅Ρ‡Π½ΡŽ.

ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅…



<Π¨ΠΈΡ€ΠΈΠ½Π°><ΠŸΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅>Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ содСрТит ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ ΡˆΠΈΡ€ΠΈΠ½Π΅ Ρ‚ΠΎΠ²Π°Ρ€Π°.
<Π”Π»ΠΈΠ½Π°><ΠŸΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅>Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ содСрТит ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Π΄Π»ΠΈΠ½Π΅ Ρ‚ΠΎΠ²Π°Ρ€Π°.
<Высота><ΠŸΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅>Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ содСрТит ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ высотС Ρ‚ΠΎΠ²Π°Ρ€Π°.
Β 
<Π’ΠΈΠΏΡ‹Π¦Π΅Π½><ΠšΠ»Π°ΡΡΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€>Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ содСрТит ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Ρ‚ΠΈΠΏΠ°Ρ… Ρ†Π΅Π½ Ρ‚ΠΎΠ²Π°Ρ€ΠΎΠ².
<Π’ΠΈΠΏΠ¦Π΅Π½Ρ‹><Π’ΠΈΠΏΡ‹Π¦Π΅Π½>Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ содСрТит описаниС Ρ‚ΠΈΠΏΠ° Ρ†Π΅Π½Ρ‹ элСмСнта.
<Ид><Π’ΠΈΠΏΠ¦Π΅Π½Ρ‹>Π£Π½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Ρ‚ΠΈΠΏΠ° Ρ†Π΅Π½Ρ‹.
<НомСрВСрсии><Π’ΠΈΠΏΠ¦Π΅Π½Ρ‹>НомСр вСрсии Ρ‚ΠΈΠΏΠ° Ρ†Π΅Π½Ρ‹.
<ΠŸΠΎΠΌΠ΅Ρ‚ΠΊΠ°Π£Π΄Π°Π»Π΅Π½ΠΈΡ><Π’ΠΈΠΏΠ¦Π΅Π½Ρ‹>ΠŸΡ€ΠΈΠ·Π½Π°ΠΊ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ элСмСнт Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Π΄Π΅Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€ΠΎΠ²Π°Π½.
<НаимСнованиС><Π’ΠΈΠΏΠ¦Π΅Π½Ρ‹>НаимСнованиС Ρ‚ΠΈΠΏΠ° Ρ†Π΅Π½Ρ‹. НаимСнованиС Ρ‚ΠΈΠΏΠ° Ρ†Π΅Π½Ρ‹ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎ, ΠΈΠ½Π°Ρ‡Π΅ Π½ΠΎΠ²ΠΎΠ΅ Π½Π΅ добавится.
<Π’Π°Π»ΡŽΡ‚Π°><Π’ΠΈΠΏΠ¦Π΅Π½Ρ‹>Π’Π°Π»ΡŽΡ‚Π° Ρ‚ΠΈΠΏΠ° Ρ†Π΅Π½Ρ‹.
<Налог><Π’ΠΈΠΏΠ¦Π΅Π½Ρ‹>ОписаниС Π½Π°Π»ΠΎΠ³ΠΎΠ² для Ρ‚ΠΈΠΏΠ° Ρ†Π΅Π½Ρ‹.
<НаимСнованиС><Налог>НаимСнованиС налога.
<Π£Ρ‡Ρ‚Π΅Π½ΠΎΠ’Π‘ΡƒΠΌΠΌΠ΅><Налог>ΠŸΡ€ΠΈΠ·Π½Π°ΠΊ Ρ‚ΠΎΠ³ΠΎ, Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ Π»ΠΈ Π½Π°Π»ΠΎΠ³ Π² ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒ Ρ‚ΠΎΠ²Π°Ρ€Π°.
Β 
<Π‘ΠΊΠ»Π°Π΄Ρ‹><ΠšΠ»Π°ΡΡΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€>Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ содСрТит ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ складах Ρ‚ΠΎΠ²Π°Ρ€ΠΎΠ².
<Π‘ΠΊΠ»Π°Π΄><Π‘ΠΊΠ»Π°Π΄Ρ‹>Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ содСрТит описаниС склада элСмСнта.
<Ид><Π‘ΠΊΠ»Π°Π΄>Π£Π½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ склада.
<НомСрВСрсии><Π‘ΠΊΠ»Π°Π΄>НомСр вСрсии склада.
<ΠŸΠΎΠΌΠ΅Ρ‚ΠΊΠ°Π£Π΄Π°Π»Π΅Π½ΠΈΡ><Π‘ΠΊΠ»Π°Π΄>ΠŸΡ€ΠΈΠ·Π½Π°ΠΊ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ элСмСнт Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Π΄Π΅Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€ΠΎΠ²Π°Π½.
<НаимСнованиС><Бклад>НаимСнованиС склада.
Β 
<ΠšΠ°Ρ‚Π°Π»ΠΎΠ³><ΠšΠΎΠΌΠΌΠ΅Ρ€Ρ‡Π΅ΡΠΊΠ°ΡΠ˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡ>Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ содСрТит ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Ρ‚ΠΎΠ²Π°Ρ€Π°Ρ…. Π£ Π½Π΅Π³ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ Β«Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠΈΡ‚Π’ΠΎΠ»ΡŒΠΊΠΎΠ˜Π·ΠΌΠ΅Π½Π΅Π½ΠΈΡΒ», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π² Π½ΠΎΠ²ΠΎΠΉ схСмС ΠΎΠ±ΠΌΠ΅Π½Π° Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ, Ρ‚.ΠΊ. ΠΎΠ½ бСсполСзСн ΠΏΡ€ΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚Π½ΠΎΠΌ ΠΎΠ±ΠΌΠ΅Π½Π΅.
<Π˜Π΄ΠšΠ»Π°ΡΡΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π°><ΠšΠ°Ρ‚Π°Π»ΠΎΠ³>Π˜Π΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°.
<Ид><ΠšΠ°Ρ‚Π°Π»ΠΎΠ³>Π˜Π΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°.
<НаимСнованиС><ΠšΠ°Ρ‚Π°Π»ΠΎΠ³>НаимСнованиС ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°.
<Π’ΠΎΠ²Π°Ρ€Ρ‹><ΠšΠ°Ρ‚Π°Π»ΠΎΠ³>Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ содСрТит ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Ρ‚ΠΎΠ²Π°Ρ€Π°Ρ….
<Π’ΠΎΠ²Π°Ρ€><Π’ΠΎΠ²Π°Ρ€Ρ‹>Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ содСрТит описаниС Ρ‚ΠΎΠ²Π°Ρ€Π°.
<Ид><Π’ΠΎΠ²Π°Ρ€>Π£Π½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Ρ‚ΠΎΠ²Π°Ρ€Π°.
<НомСрВСрсии><Π’ΠΎΠ²Π°Ρ€>НомСр вСрсии Ρ‚ΠΎΠ²Π°Ρ€Π°.
<ΠŸΠΎΠΌΠ΅Ρ‚ΠΊΠ°Π£Π΄Π°Π»Π΅Π½ΠΈΡ><Π’ΠΎΠ²Π°Ρ€>ΠŸΡ€ΠΈΠ·Π½Π°ΠΊ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ элСмСнт Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Π΄Π΅Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€ΠΎΠ²Π°Π½.
<Артикул><Π’ΠΎΠ²Π°Ρ€>Артикул Ρ‚ΠΎΠ²Π°Ρ€Π°.
<НаимСнованиС><Π’ΠΎΠ²Π°Ρ€>НаимСнованиС Ρ‚ΠΎΠ²Π°Ρ€Π°.
<ОписаниС><Π’ΠΎΠ²Π°Ρ€>ОписаниС Ρ‚ΠΎΠ²Π°Ρ€Π°, ΠΏΠΎΠΏΠ°Π΄Π°ΡŽΡ‰Π΅Π΅ Π² ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΠ΅ описаниС Ρ‚ΠΎΠ²Π°Ρ€Π°.
<ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ°><Π’ΠΎΠ²Π°Ρ€>Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ содСрТит ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ°Ρ… Ρ‚ΠΎΠ²Π°Ρ€Π°. ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ элСмСнт являСтся основной ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠΎΠΉ.
<БазоваяЕдиница><Π’ΠΎΠ²Π°Ρ€>Π•Π΄ΠΈΠ½ΠΈΡ†Π° измСрСния Ρ‚ΠΎΠ²Π°Ρ€Π°.
<Π“Ρ€ΡƒΠΏΠΏΡ‹><Π’ΠΎΠ²Π°Ρ€>Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ содСрТит ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Π³Ρ€ΡƒΠΏΠΏΠ°Ρ… (Ρ€Π°Π·Π΄Π΅Π»Π°Ρ…), Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Ρ‚ΠΎΠ²Π°Ρ€ находится.
<Ид><Π“Ρ€ΡƒΠΏΠΏΡ‹>Π˜Π΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Π³Ρ€ΡƒΠΏΠΏΡ‹ (Ρ€Π°Π·Π΄Π΅Π»Π°) Ρ‚ΠΎΠ²Π°Ρ€Π°.
<Π˜Π·Π³ΠΎΡ‚ΠΎΠ²ΠΈΡ‚Π΅Π»ΡŒ><Π’ΠΎΠ²Π°Ρ€>Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ содСрТит ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ ΠΈΠ·Π³ΠΎΡ‚ΠΎΠ²ΠΈΡ‚Π΅Π»Π΅ Ρ‚ΠΎΠ²Π°Ρ€Π°.
<ВСс><Π’ΠΎΠ²Π°Ρ€>ВСс Ρ‚ΠΎΠ²Π°Ρ€Π°.
<Ид><Π˜Π·Π³ΠΎΡ‚ΠΎΠ²ΠΈΡ‚Π΅Π»ΡŒ>Π˜Π΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ изготовитСля.
<НаимСнованиС><Π˜Π·Π³ΠΎΡ‚ΠΎΠ²ΠΈΡ‚Π΅Π»ΡŒ>НаимСнованиС производитСля.
<ΠžΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ΅ΠΠ°ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅><Π˜Π·Π³ΠΎΡ‚ΠΎΠ²ΠΈΡ‚Π΅Π»ΡŒ>ΠžΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ΅ Π½Π°ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅ производитСля.
<ЗначСнияБвойств><Π’ΠΎΠ²Π°Ρ€>Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ содСрТит ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ свойствах Ρ‚ΠΎΠ²Π°Ρ€ΠΎΠ².
<ЗначСнияБвойства><ЗначСнияБвойств>Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ содСрТит описаниС свойства Ρ‚ΠΎΠ²Π°Ρ€Π°.
<Ид><ЗначСнияБвойства>Π˜Π΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ свойства.
<Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅><ЗначСнияБвойства>Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ свойства.
<БтавкиНалогов><Π’ΠΎΠ²Π°Ρ€>Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ содСрТит ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Π½Π°Π»ΠΎΠ³Π°Ρ… Ρ‚ΠΎΠ²Π°Ρ€ΠΎΠ².
<БтавкаНалога><БтавкиНалогов>Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ содСрТит описаниС Π½Π°Π»ΠΎΠ³Π° Ρ‚ΠΎΠ²Π°Ρ€Π°.
<НаимСнованиС><БтавкаНалога>НаимСнованиС Π½Π°Π»ΠΎΠ³Π°.
<Π‘Ρ‚Π°Π²ΠΊΠ°><БтавкаНалога>Π‘Ρ‚Π°Π²ΠΊΠ° Π½Π°Π»ΠΎΠ³Π°.
<ЗначСнияРСквизитов><Π’ΠΎΠ²Π°Ρ€>Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ содСрТит ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… Ρ‚ΠΎΠ²Π°Ρ€Π°. Π•ΡΡ‚ΡŒ ΠΏΡ€Π΅Π΄ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ значСния:

  • Π€Π°ΠΉΠ» — содСрТит ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ мСстонахоТдСнии ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°;
  • ОписаниСЀайла — описаниС Ρ„Π°ΠΉΠ»Π° ΠΈΠ»ΠΈ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠΈ. Π€ΠΎΡ€ΠΌΠ°Ρ‚: <адрСс ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠΈ>#<описаниС>;
  • ВСс — вСс Ρ‚ΠΎΠ²Π°Ρ€Π°;
  • ΠžΠΏΠΈΡΠ°Π½ΠΈΠ΅Π’Π€ΠΎΡ€ΠΌΠ°Ρ‚Π΅HTML — содСрТит описаниС Ρ‚ΠΎΠ²Π°Ρ€Π° Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ HTML;
  • ПолноС Π½Π°ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅ — информация ΠΎ анонсС Ρ‚ΠΎΠ²Π°Ρ€Π°.
<Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅Π Π΅ΠΊΠ²ΠΈΠ·ΠΈΡ‚Π°><ЗначСнияРСквизитов>Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ содСрТит описаниС Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ Ρ‚ΠΎΠ²Π°Ρ€Π°.
<НаимСнованиС><Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅Π Π΅ΠΊΠ²ΠΈΠ·ΠΈΡ‚Π°>НаимСнованиС Ρ€Π΅ΠΊΠ²ΠΈΠ·ΠΈΡ‚Π°.
<Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅><Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅Π Π΅ΠΊΠ²ΠΈΠ·ΠΈΡ‚Π°>Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ€Π΅ΠΊΠ²ΠΈΠ·ΠΈΡ‚Π°.

Π€ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ XML ΠΈΠ»ΠΈ Pretty Print XML Π² Java β€” ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° Java, Android

import org.w3c.dom.Document;

import org. w3c.dom.Node;

import org.w3c.dom.NodeList;

import org.xml.sax.InputSource;

import org.xml.sax.SAXException;

Β 

import javax.xml.parsers.DocumentBuilderFactory;

import javax.xml.parsers.ParserConfigurationException;

import javax.xml.transform.OutputKeys;

import javax.xml.transform.Transformer;

import javax.xml.transform.TransformerFactory;

import javax.xml.transform.dom.DOMSource;

import javax.xml.transform.stream.StreamResult;

import javax.xml.xpath.XPath;

import javax.xml.xpath.XPathConstants;

import javax.xml.xpath.XPathFactory;

import java.io.ByteArrayInputStream;

import java.io.IOException;

import java.io.StringWriter;

Β 

public class XmlStringFormatter {

Β Β Β Β 

Β Β Β Β public static void main(String args[]) {

Β Β Β Β Β Β Β Β // какая-Ρ‚ΠΎ строка с Π½Π΅Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ XML содСрТимым

Β Β Β Β Β Β Β Β String xmlString = «<?xml version=\»1.0\» encoding=\»UTF-8\» standalone=\»yes\»?>» +

Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β «\n<Developer id=\»1\»>\n» +

Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β «<name>Andrew</name><age>25</age><position>Middle</position>» +

Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β «<language>Java</language></Developer>»;

Β 

Β Β Β Β Β Β Β Β Document document = convertStringToDocument(xmlString);

Β 

Β Β Β Β Β Β Β Β // ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ indent = 4, Π½ΠΎ посмотрим ΠΏΡ€ΠΈΠΌΠ΅Ρ€ с 6

Β Β Β Β Β Β Β Β System. out.println(toPrettyXmlString(6, document));

Β Β Β Β }

Β 

Β Β Β Β // Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ indent ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ(Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Ρƒ) отступа

Β Β Β Β public static String toPrettyXmlString(int indent, Document document) {

Β Β Β Β Β Β Β Β try {

Β Β Β Β Β Β Β Β Β Β Β Β // удаляСм ΠΏΡ€ΠΎΠ±Π΅Π»Ρ‹

Β Β Β Β Β Β Β Β Β Β Β Β XPath xPath = XPathFactory.newInstance().newXPath();

Β Β Β Β Β Β Β Β Β Β Β Β NodeList nodeList = (NodeList) xPath.evaluate(

Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β «//text()[normalize-space()=»]»,

Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β document,

Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β XPathConstants.NODESET

Β Β Β Β Β Β Β Β Β Β Β Β );

Β 

Β Β Β Β Β Β Β Β Β Β Β Β for (int i = 0; i < nodeList.getLength(); i++) {

Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Node node = nodeList.item(i);

Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β node.getParentNode().removeChild(node);

Β Β Β Β Β Β Β Β Β Β Β Β }

Β 

Β Β Β Β Β Β Β Β Β Β Β Β // устанавливаСм настройки для красивого форматирования

Β Β Β Β Β Β Β Β Β Β Β Β TransformerFactory transformerFactory = TransformerFactory.newInstance();

Β Β Β Β Β Β Β Β Β Β Β Β transformerFactory.setAttribute(«indent-number», indent);

Β Β Β Β Β Β Β Β Β Β Β Β Transformer transformer = transformerFactory. newTransformer();

Β Β Β Β Β Β Β Β Β Β Β Β transformer.setOutputProperty(OutputKeys.ENCODING, «UTF-8»);

Β Β Β Β Β Β Β Β Β Β Β Β transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, «yes»);

Β Β Β Β Β Β Β Β Β Β Β Β transformer.setOutputProperty(OutputKeys.INDENT, «yes»);

Β 

Β Β Β Β Β Β Β Β Β Β Β Β // Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌ XML

Β Β Β Β Β Β Β Β Β Β Β Β StringWriter stringWriter = new StringWriter();

Β Β Β Β Β Β Β Β Β Β Β Β transformer.transform(new DOMSource(document), new StreamResult(stringWriter));

Β 

Β Β Β Β Β Β Β Β Β Β Β Β // Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌ строку с ΠΎΡ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ XML

Β Β Β Β Β Β Β Β Β Β Β Β return stringWriter.toString();

Β Β Β Β Β Β Β Β } catch (Exception e) {

Β Β Β Β Β Β Β Β Β Β Β Β throw new RuntimeException(e);

Β Β Β Β Β Β Β Β }

Β Β Β Β }

Β 

Β Β Β Β // ΠΌΠ΅Ρ‚ΠΎΠ΄ для ΠΊΠΎΠ½Π²Π΅Ρ€Ρ‚Π°Ρ†ΠΈΠΈ строки с XML Ρ€Π°Π·ΠΌΠ΅Ρ‚ΠΊΠΎΠΉ Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Document

Β Β Β Β private static Document convertStringToDocument(String xml) {

Β Β Β Β Β Β Β Β try {

Β Β Β Β Β Β Β Β Β Β Β Β return DocumentBuilderFactory.newInstance()

Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β .newDocumentBuilder()

Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β . parse(new InputSource(new ByteArrayInputStream(xml.getBytes(«utf-8»))));

Β Β Β Β Β Β Β Β } catch (SAXException | IOException | ParserConfigurationException e) {

Β Β Β Β Β Β Β Β Β Β Β Β e.printStackTrace();

Β Β Β Β Β Β Β Β }

Β Β Β Β Β Β Β Β return null;

Β Β Β Β }

Β 

}

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅, Π Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ ΠŸΠ°Ρ€ΡΠΈΠ½Π³ XML Ρ„Π°ΠΉΠ»Π°

Python содСрТит встроСнныС XML инструмСнты для парсинга, ΠΊ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ модуля xml. Π’ Π΄Π°Π½Π½ΠΎΠΉ ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ рассмотрим Π΄Π²Π° подмодуля xml:

ΠœΡ‹ Π½Π°Ρ‡Π½Π΅ΠΌ с minidom ΠΏΠΎ Ρ‚ΠΎΠΉ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅, Ρ‡Ρ‚ΠΎ Π΄Π΅-Ρ„Π°ΠΊΡ‚ΠΎ ΠΎΠ½ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² качСствС ΠΌΠ΅Ρ‚ΠΎΠ΄Π° парсинга XML. ПослС этого, ΠΌΡ‹ взглянСм Π½Π° Ρ‚ΠΎ, ΠΊΠ°ΠΊ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ElementTree для этих Ρ†Π΅Π»Π΅ΠΉ.

Π Π°Π±ΠΎΡ‚Π°Π΅ΠΌ с minidom

Для Π½Π°Ρ‡Π°Π»Π°, Π½Π°ΠΌ Π½ΡƒΠΆΠ΅Π½ XML для парсинга. Π”Π°Π²Π°ΠΉΡ‚Π΅ взглянСм Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ нСбольшой ΠΏΡ€ΠΈΠΌΠ΅Ρ€ XML:

<?xml version=»1.0″ ?>
<zAppointments reminder=»15″>
<appointment>
<begin>1181251680</begin>
<uid>040000008200E000</uid>
<alarmTime>1181572063</alarmTime>
<state></state>
<location></location>
<duration>1800</duration>
<subject>Bring pizza home</subject>
</appointment>
</zAppointments>

<?xml version=»1.0″ ?>

<zAppointments reminder=»15″>

Β Β Β Β <appointment>

Β Β Β Β Β Β Β Β <begin>1181251680</begin>

Β Β Β Β Β Β Β Β <uid>040000008200E000</uid>

Β Β Β Β Β Β Β Β <alarmTime>1181572063</alarmTime>

Β Β Β Β Β Β Β Β <state></state>

Β Β Β Β Β Β Β Β <location></location>

Β Β Β Β Β Β Β Β <duration>1800</duration>

Β Β Β Β Β Β Β Β <subject>Bring pizza home</subject>

Β Β Β Β </appointment>

</zAppointments>

Π­Ρ‚ΠΎ Ρ‚ΠΈΠΏΠΈΡ‡Π½Ρ‹ΠΉ XML ΠΈ читаСтся ΠΎΠ½ Π²ΠΏΠΎΠ»Π½Π΅ ΠΈΠ½Ρ‚ΡƒΠΈΡ‚ΠΈΠ²Π½ΠΎ. Π’ Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΌ Π²Ρ‹, скорСС всСго, ΡΡ‚ΠΎΠ»ΠΊΠ½Π΅Ρ‚Π΅ΡΡŒ с Π±ΠΎΠ»Π΅Π΅ слоТным ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ XML, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Π² нашСм случаС ΠΌΡ‹ Ρ€Π°Π±ΠΎΡ‚Π°Π΅ΠΌ с ΠΎΡ‡Π΅Π½ΡŒ ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΌ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΎΠΌ. Π’ любом случаС, сохранитС описанный Π²Ρ‹ΡˆΠ΅ ΠΊΠΎΠ΄ XML ΠΏΠΎΠ΄ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ: appt.xml

Π”Π°Π²Π°ΠΉΡ‚Π΅ ΡƒΠ΄Π΅Π»ΠΈΠΌ большС Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ±Π»ΠΈΠΆΠ΅ ΠΏΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡ‚ΡŒΡΡ с парсингом Π΄Π°Π½Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° Π² Python ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ модуля minidom. Π­Ρ‚ΠΎ достаточно Π΄Π»ΠΈΠ½Π½Ρ‹ΠΉ кусок ΠΊΠΎΠ΄Π°, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΡŒΡ‚Π΅ΡΡŒ:

# -*- coding: utf-8 -*-
import xml.dom.minidom
import urllib.request

class ApptParser(object):

def __init__(self, url, flag=’url’):
self.list = []
self.appt_list = []
self.flag = flag
self.rem_value = 0
xml = self.getXml(url)
self.handleXml(xml)

def getXml(self, url):
try:
print(url)
f = urllib.request.urlopen(url)
except:
f = url

doc = xml.dom.minidom.parse(f)
node = doc.documentElement
if node.nodeType == xml.dom.Node.ELEMENT_NODE:
print(‘Π­Π»Π΅ΠΌΠ΅Π½Ρ‚: %s’ % node.nodeName)
for (name, value) in node.attributes.items():
print(‘ Attr — имя: %s Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅: %s’ % (name, value))

return node

def handleXml(self, xml):
rem = xml.getElementsByTagName(‘zAppointments’)
appointments = xml.getElementsByTagName(«appointment»)
self.handleAppts(appointments)

def getElement(self, element):
return self.getText(element.childNodes)

def handleAppts(self, appts):
for appt in appts:
self.handleAppt(appt)
self.list = []

def handleAppt(self, appt):
begin = self.getElement(appt.getElementsByTagName(«begin»)[0])
duration = self.getElement(appt.getElementsByTagName(«duration»)[0])
subject = self.getElement(appt.getElementsByTagName(«subject»)[0])
location = self.getElement(appt.getElementsByTagName(«location»)[0])
uid = self.getElement(appt.getElementsByTagName(«uid»)[0])

self.list.append(begin)
self.list.append(duration)
self.list.append(subject)
self.list.append(location)
self.list.append(uid)

if self.flag == ‘file’:
try:
state = self.getElement(appt.getElementsByTagName(«state»)[0])
self.list.append(state)
alarm = self.getElement(appt.getElementsByTagName(«alarmTime»)[0])
self.list.append(alarm)
except Exception as e:
print(e)

self.appt_list.append(self.list)

def getText(self, nodelist):
rc = «»
for node in nodelist:
if node.nodeType == node.TEXT_NODE:
rc = rc + node.data
return rc

if __name__ == «__main__»:
appt = ApptParser(«appt.xml»)
print(appt.appt_list)

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

# -*- coding: utf-8 -*-

import xml.dom.minidom

import urllib.request

Β 

class ApptParser(object):

Β Β Β Β 

Β Β Β Β def __init__(self, url, flag=’url’):

Β Β Β Β self.list = []

Β Β Β Β self.appt_list = []

Β Β Β Β self.flag = flag

Β Β Β Β self.rem_value = 0

Β Β Β Β xml = self.getXml(url)

Β Β Β Β self.handleXml(xml)

Β 

Β Β Β Β def getXml(self, url):

Β Β Β Β Β Β Β Β try:

Β Β Β Β Β Β Β Β Β Β Β Β print(url)

Β Β Β Β Β Β Β Β Β Β Β Β f = urllib.request.urlopen(url)

Β Β Β Β Β Β Β Β except:

Β Β Β Β Β Β Β Β Β Β Β Β f = url

Β 

Β Β Β Β Β Β Β Β doc = xml.dom.minidom.parse(f)

Β Β Β Β Β Β Β Β node = doc.documentElement

Β Β Β Β Β Β Β Β if node.nodeType == xml.dom.Node.ELEMENT_NODE:

Β Β Β Β Β Β Β Β Β Β Β Β print(‘Π­Π»Π΅ΠΌΠ΅Π½Ρ‚: %s’ % node.nodeName)

Β Β Β Β Β Β Β Β Β Β Β Β for (name, value) in node.attributes.items():

Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β print(‘ Attr — имя: %s Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅: %s’ % (name, value))

Β Β Β Β Β Β Β Β 

Β Β Β Β Β Β Β Β return node

Β Β Β Β 

Β Β Β Β def handleXml(self, xml):

Β Β Β Β Β Β Β Β rem = xml.getElementsByTagName(‘zAppointments’)

Β Β Β Β Β Β Β Β appointments = xml.getElementsByTagName(«appointment»)

Β Β Β Β Β Β Β Β self.handleAppts(appointments)

Β 

Β Β Β Β def getElement(self, element):

Β Β Β Β Β Β Β Β return self.getText(element.childNodes)

Β 

Β Β Β Β def handleAppts(self, appts):

Β Β Β Β Β Β Β Β for appt in appts:

Β Β Β Β Β Β Β Β self.handleAppt(appt)

Β Β Β Β Β Β Β Β self.list = []

Β Β Β Β 

Β Β Β Β def handleAppt(self, appt):

Β Β Β Β Β Β Β Β begin = self.getElement(appt.getElementsByTagName(«begin»)[0])

Β Β Β Β Β Β Β Β duration = self.getElement(appt.getElementsByTagName(«duration»)[0])

Β Β Β Β Β Β Β Β subject = self.getElement(appt.getElementsByTagName(«subject»)[0])

Β Β Β Β Β Β Β Β location = self.getElement(appt.getElementsByTagName(«location»)[0])

Β Β Β Β Β Β Β Β uid = self.getElement(appt.getElementsByTagName(«uid»)[0])

Β Β Β Β Β Β Β Β 

Β Β Β Β Β Β Β Β self.list.append(begin)

Β Β Β Β Β Β Β Β self.list.append(duration)

Β Β Β Β Β Β Β Β self.list.append(subject)

Β Β Β Β Β Β Β Β self.list.append(location)

Β Β Β Β Β Β Β Β self.list.append(uid)

Β Β Β Β Β Β Β Β 

Β Β Β Β Β Β Β Β if self.flag == ‘file’:

Β Β Β Β Β Β Β Β Β Β Β Β try:

Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β state = self.getElement(appt.getElementsByTagName(«state»)[0])

Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β self.list.append(state)

Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β alarm = self.getElement(appt.getElementsByTagName(«alarmTime»)[0])

Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β self.list.append(alarm)

Β Β Β Β Β Β Β Β Β Β Β Β except Exception as e:

Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β print(e)

Β 

Β Β Β Β Β Β Β Β self.appt_list.append(self.list)

Β 

Β Β Β Β def getText(self, nodelist):

Β Β Β Β Β Β Β Β rc = «»

Β Β Β Β Β Β Β Β for node in nodelist:

Β Β Β Β Β Β Β Β Β Β Β Β if node.nodeType == node.TEXT_NODE:

Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β rc = rc + node.data

Β Β Β Β Β Β Β Β return rc

Β 

if __name__ == «__main__»:

Β Β Β Β appt = ApptParser(«appt.xml»)

Β Β Β Β print(appt.appt_list)

Π­Ρ‚ΠΎΡ‚ ΠΊΠΎΠ΄ основан Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΈΠ· Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ Python ΠΈ стоит ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ, Π½Π° ΠΌΠΎΠΉ взгляд, ΠΎΠ½ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΡƒΡ€ΠΎΠ΄Π»ΠΈΠ²Ρ‹ΠΉ. Π”Π°Π²Π°ΠΉΡ‚Π΅ Π΅Π³ΠΎ Ρ€Π°Π·Π±Π΅Ρ€Π΅ΠΌ ΠΏΠΎ кусочкам. ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ url, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ Π²ΠΈΠ΄ΠΈΠΌ Π² классС ApptParser, ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΊΠ°ΠΊ url Ρ‚Π°ΠΊ ΠΈ Ρ„Π°ΠΉΠ»ΠΎΠΌ. Π’ ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ getXml, ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ url. Если это ΠΏΡ€ΠΈΠ²Π΅Π»ΠΎ ΠΊ ошибкС, Π·Π½Π°Ρ‡ΠΈΡ‚ url – это ΠΏΡƒΡ‚ΡŒ ΠΊ Ρ„Π°ΠΉΠ»Ρƒ. Π”Π°Π»Π΅Π΅ ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄ парсинга для парсинга XML. Π”Π°Π»Π΅Π΅ ΠΌΡ‹ ΠΈΠ·Ρ‹ΠΌΠ°Π΅ΠΌ node ΠΈΠ· XML. ΠœΡ‹ опустим всС условия, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π² Π΄Π°Π½Π½ΠΎΠΉ ΡΡ‚Π°Ρ‚ΡŒΠ΅ это Π½Π΅ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΈΠ°Π»ΡŒΠ½ΠΎ. НаконСц, ΠΌΡ‹ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ node. ВСхничСски, node являСтся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ XML, ΠΈ ΠΌΡ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅ΠΌ Π΅Π³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ handleXml. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ всС назначСния Π² XML, ΠΌΡ‹ Π΄Π΅Π»Π°Π΅ΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:

xml.getElementsByTagName(«appointment»)

xml.getElementsByTagName(«appointment»)

ПослС этого, ΠΌΡ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅ΠΌ эту ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ handleAppts. Π­Ρ‚ΠΎ большой объСм ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ. Π₯ΠΎΡ€ΠΎΡˆΠ΅ΠΉ ΠΈΠ΄Π΅Π΅ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ нСбольшой Ρ€Π΅Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ½Π³ этого ΠΊΠΎΠ΄Π° для этой Ρ†Π΅Π»ΠΈ, вмСсто ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ всСй этой ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ Ρ†Π΅Π»ΠΈΠΊΠΎΠΌ, Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΌΡ‹ просто настраиваСм ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ класса, послС Ρ‡Π΅Π³ΠΎ Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π±Π΅Π· ΠΊΠ°ΠΊΠΈΡ…-Π»ΠΈΠ±ΠΎ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ². Π― ΠΎΡΡ‚Π°Π²Π»ΡŽ это Π² качСствС упраТнСния для Ρ‡ΠΈΡ‚Π°Ρ‚Π΅Π»Π΅ΠΉ. Π’ любом случаС, ΠΌΠ΅Ρ‚ΠΎΠ΄ handleAppts Ρ‚ΠΎΠ»ΡŒΠΊΠΎ создаСт Ρ†ΠΈΠΊΠ» Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΈ ΠΈ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ handleAppt, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹Ρ‚ΡΠ½ΡƒΡ‚ΡŒ ΠΊΠΎΠ΅-ΠΊΠ°ΠΊΡƒΡŽ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ, добавляСт Π΄Π°Π½Π½Ρ‹Π΅ Π² список ΠΈ добавляСт этот список Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ список. ИдСя Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°ΠΊΠΎΠ½Ρ‡ΠΈΡ‚ΡŒ со списком списков, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ содСрТат всС ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΎ встрСчах.

Π•ΡΡ‚ΡŒ вопросы ΠΏΠΎ Python?

На нашСм Ρ„ΠΎΡ€ΡƒΠΌΠ΅ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°Π΄Π°Ρ‚ΡŒ любой вопрос ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΎΡ‚Π²Π΅Ρ‚ ΠΎΡ‚ всСго нашСго сообщСства!

Telegram Π§Π°Ρ‚ & Канал

ВступитС Π² наш Π΄Ρ€ΡƒΠΆΠ½Ρ‹ΠΉ Ρ‡Π°Ρ‚ ΠΏΠΎ Python ΠΈ Π½Π°Ρ‡Π½ΠΈΡ‚Π΅ ΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ с Π΅Π΄ΠΈΠ½ΠΎΠΌΡ‹ΡˆΠ»Π΅Π½Π½ΠΈΠΊΠ°ΠΌΠΈ! Π‘Ρ‚Π°Π½ΡŒΡ‚Π΅ Ρ‡Π°ΡΡ‚ΡŒΡŽ большого сообщСства!

Паблик VK

Одно ΠΈΠ· самых Π±ΠΎΠ»ΡŒΡˆΠΈΡ… сообщСств ΠΏΠΎ Python Π² ΡΠΎΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ сСти Π’Πš. Π’ΠΈΠ΄Π΅ΠΎ ΡƒΡ€ΠΎΠΊΠΈ ΠΈ ΠΊΠ½ΠΈΠ³ΠΈ для вас!

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ handleAppt Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ getElement, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ, Π² свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ getText. ВСхничСски, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π²Ρ‹Π·ΠΎΠ² getElement ΠΈ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ getText Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ. Π‘ Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны, Π²Π°ΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ Π² getElement для ΠΊΠΎΠ½Π²Π΅Ρ€Ρ‚Π°Ρ†ΠΈΠΈ тСкста, ΠΈΠ»ΠΈ Ρ‡Π΅Π³ΠΎ-Ρ‚ΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ ΠΏΠ΅Ρ€Π΅Π΄ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ΠΎΠΌ. НапримСр, Π²Π°ΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ ΠΊΠΎΠ½Π²Π΅Ρ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ†Π΅Π»Ρ‹Π΅ числа, числа с запятыми ΠΈΠ»ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ decimal.Decimal. Π”Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ с minidom, ΠΏΠ΅Ρ€Π΅Π΄ Ρ‚Π΅ΠΌ ΠΊΠ°ΠΊ Π΄Π²ΠΈΠ³Π°Ρ‚ΡŒΡΡ дальшС. ΠœΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ XML с сайта MSDN ΠœΠ°ΠΉΠΊΡ€ΠΎΡΠΎΡ„Ρ‚: http://msdn.microsoft.com/en-us/library/ms762271%28VS.85%29.aspx . Π‘ΠΎΡ…Ρ€Π°Π½ΠΈΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄ ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ example.xml

<?xml version=»1.0″?>
<catalog>
<book>
<author>Gambardella, Matthew</author>
<title>XML Developer’s Guide</title>
<genre>Computer</genre>
<price>44.95</price>
<publish_date>2000-10-01</publish_date>
<description>An in-depth look at creating applications
with XML.</description>
</book>
<book>
<author>Ralls, Kim</author>
<title>Midnight Rain</title>
<genre>Fantasy</genre>
<price>5.95</price>
<publish_date>2000-12-16</publish_date>
<description>A former architect battles corporate zombies,
an evil sorceress, and her own childhood to become queen
of the world.</description>
</book>
<book>
<author>Corets, Eva</author>
<title>Maeve Ascendant</title>
<genre>Fantasy</genre>
<price>5.95</price>
<publish_date>2000-11-17</publish_date>
<description>After the collapse of a nanotechnology
society in England, the young survivors lay the
foundation for a new society.</description>
</book>
</catalog>

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

<?xml version=»1.0″?>

<catalog>

Β Β  <book>

Β Β Β Β Β Β <author>Gambardella, Matthew</author>

Β Β Β Β Β Β <title>XML Developer’s Guide</title>

Β Β Β Β Β Β <genre>Computer</genre>

Β Β Β Β Β Β <price>44.95</price>

Β Β Β Β Β Β <publish_date>2000-10-01</publish_date>

Β Β Β Β Β Β <description>An in-depth look at creating applications

Β Β Β Β Β Β with XML.</description>

Β Β  </book>

Β Β  <book>

Β Β Β Β Β Β <author>Ralls, Kim</author>

Β Β Β Β Β Β <title>Midnight Rain</title>

Β Β Β Β Β Β <genre>Fantasy</genre>

Β Β Β Β Β Β <price>5.95</price>

Β Β Β Β Β Β <publish_date>2000-12-16</publish_date>

Β Β Β Β Β Β <description>A former architect battles corporate zombies,

Β Β Β Β Β Β an evil sorceress, and her own childhood to become queen

Β Β Β Β Β Β of the world.</description>

Β Β  </book>

Β Β  <book>

Β Β Β Β Β Β <author>Corets, Eva</author>

Β Β Β Β Β Β <title>Maeve Ascendant</title>

Β Β Β Β Β Β <genre>Fantasy</genre>

Β Β Β Β Β Β <price>5.95</price>

Β Β Β Β Β Β <publish_date>2000-11-17</publish_date>

Β Β Β Β Β Β <description>After the collapse of a nanotechnology

Β Β Β Β Β Β society in England, the young survivors lay the

Β Β Β Β Β Β foundation for a new society.</description>

Β Β  </book>

</catalog>

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΌΡ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠ»ΠΈ парсинг XML, ΠΈΠ·Π²Π»Π΅ΠΊΠ»ΠΈ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ ΠΊΠ½ΠΈΠ³ΠΈ ΠΈ Π²Ρ‹Π²Π΅Π»ΠΈ ΠΈΡ… Π² stdout. Π”Π°Π²Π°ΠΉΡ‚Π΅ взглянСм Π½Π° ΠΊΠΎΠ΄:

# -*- coding: utf-8 -*-
import xml.dom.minidom as minidom

def getTitles(xml):
«»»
Π’Ρ‹Π²ΠΎΠ΄ΠΈΠΌ всС Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ ΠΈΠ· xml.
«»»
doc = minidom.parse(xml)
node = doc.documentElement
books = doc.getElementsByTagName(«book»)

titles = []
for book in books:
titleObj = book.getElementsByTagName(«title»)[0]
titles.append(titleObj)

for title in titles:
nodes = title.childNodes
for node in nodes:
if node.nodeType == node.TEXT_NODE:
print(node.data)

if __name__ == «__main__»:
document = ‘example.xml’
getTitles(document)

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

# -*- coding: utf-8 -*-

import xml.dom.minidom as minidom

Β 

def getTitles(xml):

Β Β Β Β «»»

Β Β Β Β Π’Ρ‹Π²ΠΎΠ΄ΠΈΠΌ всС Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ ΠΈΠ· xml.

Β Β Β Β «»»

Β Β Β Β doc = minidom.parse(xml)

Β Β Β Β node = doc.documentElement

Β Β Β Β books = doc.getElementsByTagName(«book»)

Β Β Β Β 

Β Β Β Β titles = []

Β Β Β Β for book in books:

Β Β Β Β Β Β Β Β titleObj = book.getElementsByTagName(«title»)[0]

Β Β Β Β Β Β Β Β titles.append(titleObj)

Β Β Β Β 

Β Β Β Β for title in titles:

Β Β Β Β Β Β Β Β nodes = title.childNodes

Β Β Β Β Β Β Β Β for node in nodes:

Β Β Β Β Β Β Β Β Β Β Β Β if node.nodeType == node.TEXT_NODE:

Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β print(node.data)

Β 

if __name__ == «__main__»:

Β Β Β Β document = ‘example.xml’

Β Β Β Β getTitles(document)

Π”Π°Π½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ – это Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½Π° короткая функция, которая ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΠΎΠ΄ΠΈΠ½ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ являСтся Ρ„Π°ΠΉΠ»ΠΎΠΌ XML. ΠœΡ‹ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ minidom ΠΈ Π΄Π°Π΅ΠΌ Π΅ΠΌΡƒ Ρ‚Π°ΠΊΠΎΠ΅ ΠΆΠ΅ Π½Π°Π·Π²Π°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠΏΡ€ΠΎΡΡ‚ΠΈΡ‚ΡŒ отсылки ΠΊ Π½Π΅ΠΌΡƒ. Π”Π°Π»Π΅Π΅ ΠΌΡ‹ выполняСм парсинг XML. ΠŸΠ΅Ρ€Π²Ρ‹Π΅ Π΄Π²Π΅ строки Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΡ…ΠΎΠΆΠΈ Π½Π° Ρ‚Π΅, Ρ‡Ρ‚ΠΎ Π±Ρ‹Π»ΠΈ Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅. ΠœΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄ getElementsByTagName Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒ Π½ΡƒΠΆΠ½Ρ‹Π΅ Π½Π°ΠΌ части XML, послС Ρ‡Π΅Π³ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΡŽ Π½Π°Π΄ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ ΠΈ ΠΈΠ·Π²Π»Π΅Ρ‡ΡŒ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ ΠΊΠ½ΠΈΠ³ΠΈ. Π’Π°ΠΊ, ΠΌΡ‹ ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠ², Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΡŽ этих Π΄Π°Π½Π½Ρ‹Ρ… Π² Ρ‚ΠΎΠΌ числС, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π²Ρ‹Ρ‚Π°Ρ‰ΠΈΡ‚ΡŒ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ тСкст, ΠΏΠΎ этой ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅ ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ Ρ†ΠΈΠΊΠ»Π°. Π”Π°Π²Π°ΠΉΡ‚Π΅ ΡƒΠ΄Π΅Π»ΠΈΠΌ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π½Π° унаслСдованный ΠΌΠΎΠ΄ΡƒΠ»ΡŒ xml ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ ElementTree.

ΠŸΠ°Ρ€ΡΠΈΠ½Π³ с ElementTree

Π’ Π΄Π°Π½Π½ΠΎΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅, ΠΌΡ‹ научимся ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ XML Ρ„Π°ΠΉΠ»Ρ‹, Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ парсинг ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ElementTree. Для сравнСния, ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Ρ‚ΠΎΡ‚ ΠΆΠ΅ XML, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ использовали Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠ΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π°Π·Π½ΠΈΡ†Ρƒ Π² использовании minidom ΠΈ ElementTree. Π’ΠΎΡ‚ наш ΠΊΠΎΠ΄:

<?xml version=»1.0″ ?>
<zAppointments reminder=»15″>
<appointment>
<begin>1181251680</begin>
<uid>040000008200E000</uid>
<alarmTime>1181572063</alarmTime>
<state></state>
<location></location>
<duration>1800</duration>
<subject>Bring pizza home</subject>
</appointment>
</zAppointments>

<?xml version=»1.0″ ?>

<zAppointments reminder=»15″>

Β Β Β Β <appointment>

Β Β Β Β Β Β Β Β <begin>1181251680</begin>

Β Β Β Β Β Β Β Β <uid>040000008200E000</uid>

Β Β Β Β Β Β Β Β <alarmTime>1181572063</alarmTime>

Β Β Β Β Β Β Β Β <state></state>

Β Β Β Β Β Β Β Β <location></location>

Β Β Β Β Β Β Β Β <duration>1800</duration>

Β Β Β Β Β Β Β Β <subject>Bring pizza home</subject>

Β Β Β Β </appointment>

</zAppointments>

Π”Π°Π²Π°ΠΉΡ‚Π΅ Π½Π°Ρ‡Π½Π΅ΠΌ с изучСния Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΡƒΡŽ XML структуру ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Python

Как ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ XML ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ElementTree

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ XML ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ElementTree – это ΠΎΡ‡Π΅Π½ΡŒ просто. Π’ Π΄Π°Π½Π½ΠΎΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅, ΠΌΡ‹ попытаСмся ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ написанный Π²Ρ‹ΡˆΠ΅ XML Π² Python. Π”Π°Π²Π°ΠΉΡ‚Π΅ посмотрим Π½Π° ΠΊΠΎΠ΄:

# -*- coding: utf-8 -*-
import xml.etree.ElementTree as xml

def createXML(filename):
«»»
Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ XML Ρ„Π°ΠΉΠ».
«»»
root = xml.Element(«zAppointments»)
appt = xml.Element(«appointment»)
root.append(appt)

# создаСм Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠΉ суб-элСмСнт.
begin = xml.SubElement(appt, «begin»)
begin.text = «1181251680»

uid = xml.SubElement(appt, «uid»)
uid.text = «040000008200E000»

alarmTime = xml.SubElement(appt, «alarmTime»)
alarmTime.text = «1181572063»

state = xml.SubElement(appt, «state»)

location = xml.SubElement(appt, «location»)

duration = xml.SubElement(appt, «duration»)
duration.text = «1800»

subject = xml.SubElement(appt, «subject»)

tree = xml.ElementTree(root)
with open(filename, «w») as fh:
tree.write(fh)

if __name__ == «__main__»:
createXML(«appt.xml»)

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

# -*- coding: utf-8 -*-

import xml.etree.ElementTree as xml

Β 

def createXML(filename):

Β Β Β Β «»»

Β Β Β Β Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ XML Ρ„Π°ΠΉΠ».

Β Β Β Β «»»

Β Β Β Β root = xml.Element(«zAppointments»)

Β Β Β Β appt = xml.Element(«appointment»)

Β Β Β Β root.append(appt)

Β Β Β Β 

Β Β Β Β # создаСм Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠΉ суб-элСмСнт.

Β Β Β Β begin = xml.SubElement(appt, «begin»)

Β Β Β Β begin.text = «1181251680»

Β Β Β Β 

Β Β Β Β uid = xml.SubElement(appt, «uid»)

Β Β Β Β uid.text = «040000008200E000»

Β Β Β Β 

Β Β Β Β alarmTime = xml.SubElement(appt, «alarmTime»)

Β Β Β Β alarmTime.text = «1181572063»

Β Β Β Β 

Β Β Β Β state = xml.SubElement(appt, «state»)

Β Β Β Β 

Β Β Β Β location = xml.SubElement(appt, «location»)

Β Β Β Β 

Β Β Β Β duration = xml.SubElement(appt, «duration»)

Β Β Β Β duration.text = «1800»

Β Β Β Β 

Β Β Β Β subject = xml.SubElement(appt, «subject»)

Β Β Β Β 

Β Β Β Β tree = xml.ElementTree(root)

Β Β Β Β with open(filename, «w») as fh:

Β Β Β Β Β Β Β Β tree.write(fh)

Β 

if __name__ == «__main__»:

Β Β Β Β createXML(«appt.xml»)

Если Π²Ρ‹ запуститС этот ΠΊΠΎΠ΄, Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π²Ρ€ΠΎΠ΄Π΅ Π½ΠΈΠΆΠ΅ΠΈΠ·Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠ³ΠΎ (Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π² ΠΎΠ΄Π½ΠΎΠΉ строкС):

<?xml version=»1.0″ ?>
<zAppointments reminder=»15″>
<appointment>
<begin>1181251680</begin>
<uid>040000008200E000</uid>
<alarmTime>1181572063</alarmTime>
<state />
<location />
<duration>1800</duration>
<subject />
</appointment>
</zAppointments>

<?xml version=»1.0″ ?>

<zAppointments reminder=»15″>

Β Β Β Β <appointment>

Β Β Β Β Β Β Β Β <begin>1181251680</begin>

Β Β Β Β Β Β Β Β <uid>040000008200E000</uid>

Β Β Β Β Β Β Β Β <alarmTime>1181572063</alarmTime>

Β Β Β Β Β Β Β Β <state />

Β Β Β Β Β Β Β Β <location />

Β Β Β Β Β Β Β Β <duration>1800</duration>

Β Β Β Β Β Β Β Β <subject />

Β Β Β Β </appointment>

</zAppointments>

Π­Ρ‚ΠΎ ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΡ…ΠΎΠΆΠ΅ Π½Π° исходный ΠΊΠΎΠ΄ ΠΈ это, бСзусловно, дСйствСнный XML. Π‘Π°ΠΌΠΎ собой, наши ΠΊΠΎΠ΄Ρ‹ ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ, Π½ΠΎ вСсьма ΠΏΠΎΡ…ΠΎΠΆΠΈ. Π”Π°Π²Π°ΠΉΡ‚Π΅ ΡƒΠ΄Π΅Π»ΠΈΠΌ врСмя для Ρ€Π°Π·Π±ΠΎΡ€Π° ΠΊΠΎΠ΄Π° ΠΈ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π΅Π³ΠΎ Ρ…ΠΎΡ€ΠΎΡˆΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅ΠΌ. Для Π½Π°Ρ‡Π°Π»Π° ΠΌΡ‹ создаСм ΠΊΠΎΡ€Π½Π΅Π²ΠΎΠΉ элСмСнт ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Element модуля ElementTree. Π”Π°Π»Π΅Π΅, ΠΌΡ‹ создаСм элСмСнт назначСния ΠΈ добавляСм Π΅Π³ΠΎ ΠΊ root. Π”Π°Π»Π΅Π΅, ΠΌΡ‹ создаСм SubElements, Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠ² парсинг назначСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Element (appt) Π² SubElement наряду с ΠΈΠΌΠ΅Π½Π΅ΠΌ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, begin. Π”Π°Π»Π΅Π΅, для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ SubElement, ΠΌΡ‹ Π½Π°Π·Π½Π°Ρ‡Π°Π΅ΠΌ ΠΈΡ… тСкстовыС свойства, для ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ значСния. Π’ ΠΊΠΎΠ½Ρ†Π΅ скрипта ΠΌΡ‹ создаСм ElementTree ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Π΅Π³ΠΎ для написания XML Π² Ρ„Π°ΠΉΠ»Π΅. Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΡ‹ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ ΠΊ Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°ΡƒΡ‡ΠΈΡ‚ΡŒΡΡ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ»!

Как Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ XML ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ElementTree

Π Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ XML ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ElementTree это Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΡ‡Π΅Π½ΡŒ просто. Π§Ρ‚ΠΎΠ±Ρ‹ всС Π±Ρ‹Π»ΠΎ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ интСрСснСС, ΠΌΡ‹ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Π΄Ρ€ΡƒΠ³ΠΎΠΉ Π±Π»ΠΎΠΊ назначСния Π² XML:

<?xml version=»1.0″ ?>
<zAppointments reminder=»15″>
<appointment>
<begin>1181251680</begin>
<uid>040000008200E000</uid>
<alarmTime>1181572063</alarmTime>
<state></state>
<location></location>
<duration>1800</duration>
<subject>Bring pizza home</subject>
</appointment>
<appointment>
<begin>1181253977</begin>
<uid>sdlkjlkadhdakhdfd</uid>
<alarmTime>1181588888</alarmTime>
<state>TX</state>
<location>Dallas</location>
<duration>1800</duration>
<subject>Bring pizza home</subject>
</appointment>
</zAppointments>

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

<?xml version=»1.0″ ?>

<zAppointments reminder=»15″>

Β Β Β Β <appointment>

Β Β Β Β Β Β Β Β <begin>1181251680</begin>

Β Β Β Β Β Β Β Β <uid>040000008200E000</uid>

Β Β Β Β Β Β Β Β <alarmTime>1181572063</alarmTime>

Β Β Β Β Β Β Β Β <state></state>

Β Β Β Β Β Β Β Β <location></location>

Β Β Β Β Β Β Β Β <duration>1800</duration>

Β Β Β Β Β Β Β Β <subject>Bring pizza home</subject>

Β Β Β Β </appointment>

Β Β Β Β <appointment>

Β Β Β Β Β Β Β Β <begin>1181253977</begin>

Β Β Β Β Β Β Β Β <uid>sdlkjlkadhdakhdfd</uid>

Β Β Β Β Β Β Β Β <alarmTime>1181588888</alarmTime>

Β Β Β Β Β Β Β Β <state>TX</state>

Β Β Β Β Β Β Β Β <location>Dallas</location>

Β Β Β Β Β Β Β Β <duration>1800</duration>

Β Β Β Β Β Β Β Β <subject>Bring pizza home</subject>

Β Β Β Β </appointment>

</zAppointments>

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΡ‹ напишСм ΠΊΠΎΠ΄ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ‚Π΅Π³Π° begin ΠΎΡ‚ сСкунд, начиная с эпохи Π½Π° Ρ‡Ρ‚ΠΎ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Π±ΠΎΠ»Π΅Π΅ Ρ‡ΠΈΡ‚Π°Π±Π΅Π»ΡŒΠ½ΠΎΠ΅. ΠœΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ time python, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±Π»Π΅Π³Ρ‡ΠΈΡ‚ΡŒ сСбС Тизнь:

# -*- coding: utf-8 -*-
import time
import xml.etree.cElementTree as ET

def editXML(filename):
«»»
Π Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΡƒΠ΅ΠΌ XML Ρ„Π°ΠΉΠ».
«»»
tree = ET.ElementTree(file=filename)
root = tree.getroot()

for begin_time in root.iter(«begin»):
begin_time.text = time.ctime(int(begin_time.text))

tree = ET.ElementTree(root)
with open(«updated.xml», «w») as f:
tree.write(f)

if __name__ == «__main__»:
editXML(«original_appt.xml»)

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

# -*- coding: utf-8 -*-

import time

import xml.etree.cElementTree as ET

Β 

def editXML(filename):

Β Β Β Β «»»

Β Β Β Β Π Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΡƒΠ΅ΠΌ XML Ρ„Π°ΠΉΠ».

Β Β Β Β «»»

Β Β Β Β tree = ET.ElementTree(file=filename)

Β Β Β Β root = tree.getroot()

Β Β Β Β 

Β Β Β Β for begin_time in root.iter(«begin»):

Β Β Β Β Β Β Β Β begin_time.text = time.ctime(int(begin_time.text))

Β Β Β Β 

Β Β Β Β tree = ET.ElementTree(root)

Β Β Β Β with open(«updated.xml», «w») as f:

Β Β Β Β Β Β Β Β tree.write(f)

Β 

if __name__ == «__main__»:

Β Β Β Β editXML(«original_appt.xml»)

Π—Π΄Π΅ΡΡŒ ΠΌΡ‹ создаСм ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ElementTree ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ tree ΠΈ ΠΈΠ·Π²Π»Π΅Ρ‡Π΅ΠΌ ΠΈΠ· Π½Π΅Π³ΠΎ root. Π”Π°Π»Π΅Π΅ ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄ iter() Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°ΠΉΡ‚ΠΈ всС Ρ‚Π΅Π³ΠΈ, ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Π½Ρ‹Π΅ β€œbegin”. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ iter() Π±Ρ‹Π» Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ Π² Python 2.7. Π’ Π½Π°Π΅ΠΌ Ρ†ΠΈΠΊΠ»Π΅ for, ΠΌΡ‹ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌ тСкстовоС содСрТимоС ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ Ρ‡ΠΈΡ‚Π°Π±Π΅Π»ΡŒΠ½Ρ‹ΠΉ Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° time.ctime(). Π’Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΊΠΎΠ½Π²Π΅Ρ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ строку для Ρ†Π΅Π»Ρ‹Ρ… чисСл, ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π΅ ΠΈΡ… ΠΊ ctime. Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

<zAppointments reminder=»15″>
<appointment>
<begin>Thu Jun 07 16:28:00 2007</begin>
<uid>040000008200E000</uid>
<alarmTime>1181572063</alarmTime>
<state />
<location />
<duration>1800</duration>
<subject>Bring pizza home</subject>
</appointment>
<appointment>
<begin>Thu Jun 07 17:06:17 2007</begin>
<uid>sdlkjlkadhdakhdfd</uid>
<alarmTime>1181588888</alarmTime>
<state>TX</state>
<location>Dallas</location>
<duration>1800</duration>
<subject>Bring pizza home</subject>
</appointment>
</zAppointments>

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

<zAppointments reminder=»15″>

Β Β Β Β <appointment>

Β Β Β Β Β Β Β Β <begin>Thu Jun 07 16:28:00 2007</begin>

Β Β Β Β Β Β Β Β <uid>040000008200E000</uid>

Β Β Β Β Β Β Β Β <alarmTime>1181572063</alarmTime>

Β Β Β Β Β Β Β Β <state />

Β Β Β Β Β Β Β Β <location />

Β Β Β Β Β Β Β Β <duration>1800</duration>

Β Β Β Β Β Β Β Β <subject>Bring pizza home</subject>

Β Β Β Β </appointment>

Β Β Β Β <appointment>

Β Β Β Β Β Β Β Β <begin>Thu Jun 07 17:06:17 2007</begin>

Β Β Β Β Β Β Β Β <uid>sdlkjlkadhdakhdfd</uid>

Β Β Β Β Β Β Β Β <alarmTime>1181588888</alarmTime>

Β Β Β Β Β Β Β Β <state>TX</state>

Β Β Β Β Β Β Β Β <location>Dallas</location>

Β Β Β Β Β Β Β Β <duration>1800</duration>

Β Β Β Β Β Β Β Β <subject>Bring pizza home</subject>

Β Β Β Β </appointment>

</zAppointments>

Π’Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ElementTree, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ find() ΠΈΠ»ΠΈ findall() для поиска ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Ρ… Ρ‚Π΅Π³ΠΎΠ² Π² вашСм XML. ΠœΠ΅Ρ‚ΠΎΠ΄ find() Π½Π°ΠΉΠ΄Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ findall() Π½Π°ΠΉΠ΄Π΅Ρ‚ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ‚Π΅Π³ с ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΉ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΊΠΎΠΉ. Π­Ρ‚ΠΎ ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ ΠΏΡ€ΠΈ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΈ Π·Π°Π΄Π°Ρ‡, Π²ΠΎΠ·Π½ΠΈΠΊΡˆΠΈΡ… ΠΏΡ€ΠΈ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ ΠΈΠ»ΠΈ ΠΏΡ€ΠΈ парсингС, Ρ‡Ρ‚ΠΎ являСтся Ρ‚Π΅ΠΌΠΎΠΉ нашСго ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ Ρ€Π°Π·Π΄Π΅Π»Π°!

ΠŸΠ°Ρ€ΡΠΈΠ½Π³ ΠΈ ElementTree

БСйчас ΠΌΡ‹ научимся Ρ‚ΠΎΠΌΡƒ, ΠΊΠ°ΠΊ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ парсинг ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ElementTree. Π‘Π½Π°Ρ‡Π°Π»Π°, ΠΌΡ‹ пройдСмся ΠΏΠΎ ΠΊΠΎΠ΄Ρƒ Π² Ρ†Π΅Π»ΠΎΠΌ, Π·Π°Ρ‚Π΅ΠΌ Ρ€Π°Π·Π±Π΅Ρ€Π΅ΠΌ Π΅Π³ΠΎ ΠΊΠΈΡ€ΠΏΠΈΡ‡ΠΈΠΊ Π·Π° ΠΊΠΈΡ€ΠΏΠΈΡ‡ΠΈΠΊΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ½ΡΡ‚ΡŒ, ΠΊΠ°ΠΊ это Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ этот ΠΊΠΎΠ΄ основан Π½Π° ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅, ΠΈ Π΄ΠΎΠ»ΠΆΠ΅Π½ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΆΠ΅ ΠΈ Π½Π° Π²Ρ‚ΠΎΡ€ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅.

# -*- coding: utf-8 -*-
import xml.etree.cElementTree as ET

def parseXML(xml_file):
«»»
ΠŸΠ°Ρ€ΡΠΈΠ½Π³ XML ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ElementTree
«»»
tree = ET.ElementTree(file=xml_file)
print(tree.getroot())
root = tree.getroot()
print(«tag=%s, attrib=%s» % (root.tag, root.attrib))

for child in root:
print(child.tag, child.attrib)
if child.tag == «appointment»:
for step_child in child:
print(step_child.tag)

# ΠŸΠ°Ρ€ΡΠΈΠ½Π³ всСй XML структуры.
print(«-» * 40)
print(«Iterating using a tree iterator»)
print(«-» * 40)
iter_ = tree.getiterator()

for elem in iter_:
print(elem.tag)

# ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠ΅ элСмСнты.
print(«-» * 40)
print(«ΠžΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌ Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠ΅ ΠΆΠ»ΠΌΠ΅Π½Ρ‚Ρ‹ getchildren()»)
print(«-» * 40)
appointments = root.getchildren()

for appointment in appointments:
appt_children = appointment.getchildren()
for appt_child in appt_children:
print(«%s=%s» % (appt_child.tag, appt_child.text))

if __name__ == «__main__»:
parseXML(«appt.xml»)

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

# -*- coding: utf-8 -*-

import xml.etree.cElementTree as ET

Β 

def parseXML(xml_file):

Β Β Β Β «»»

Β Β Β Β ΠŸΠ°Ρ€ΡΠΈΠ½Π³ XML ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ElementTree

Β Β Β Β «»»

Β Β Β Β tree = ET.ElementTree(file=xml_file)

Β Β Β Β print(tree.getroot())

Β Β Β Β root = tree.getroot()

Β Β Β Β print(«tag=%s, attrib=%s» % (root.tag, root.attrib))

Β Β Β Β 

Β Β Β Β for child in root:

Β Β Β Β Β Β Β Β print(child.tag, child.attrib)

Β Β Β Β Β Β Β Β if child.tag == «appointment»:

Β Β Β Β Β Β Β Β Β Β Β Β for step_child in child:

Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β print(step_child.tag)

Β 

Β Β Β Β # ΠŸΠ°Ρ€ΡΠΈΠ½Π³ всСй XML структуры.

Β Β Β Β print(«-» * 40)

Β Β Β Β print(«Iterating using a tree iterator»)

Β Β Β Β print(«-» * 40)

Β Β Β Β iter_ = tree.getiterator()

Β Β Β Β 

Β Β Β Β for elem in iter_:

Β Β Β Β Β Β Β Β print(elem.tag)

Β 

Β Β Β Β # ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠ΅ элСмСнты.

Β Β Β Β print(«-» * 40)

Β Β Β Β print(«ΠžΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌ Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠ΅ ΠΆΠ»ΠΌΠ΅Π½Ρ‚Ρ‹ getchildren()»)

Β Β Β Β print(«-» * 40)

Β Β Β Β appointments = root.getchildren()

Β Β Β Β 

Β Β Β Β for appointment in appointments:

Β Β Β Β Β Β Β Β appt_children = appointment.getchildren()

Β Β Β Β Β Β Β Β for appt_child in appt_children:

Β Β Β Β Β Β Β Β Β Β Β Β print(«%s=%s» % (appt_child.tag, appt_child.text))

Β 

if __name__ == «__main__»:

Β Β Β Β parseXML(«appt.xml»)

Π’Ρ‹ ΡƒΠΆΠ΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠΎΠ½ΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΈ ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, Π½ΠΎ Π² этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΈ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ ΠΌΡ‹ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌ cElementTree вмСсто ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠ³ΠΎ ElementTree. Π Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ этими двумя Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ cElementTree основан Π½Π° Π‘, Π° Π½Π΅ Π½Π° Python, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ ΠΎΠ½ Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ быстрСС. Π’ любом случаС, ΠΌΡ‹ снова создаСм ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ElementTree ΠΈ ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅ΠΌ root ΠΈΠ· Π½Π΅Π³ΠΎ. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌ root, Π΅Π³ΠΎ Ρ‚Π΅Π³ ΠΈ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹. Π”Π°Π»Π΅Π΅ ΠΌΡ‹ ΠΏΠΎΠΊΠ°ΠΆΠ΅ΠΌ нСсколько способов ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ Ρ‚Π΅Π³ΠΎΠ². ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ Ρ†ΠΈΠΊΠ» просто ΠΈΡ‚Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ XML, Π΄ΠΎΡ‡ΠΊΡƒ Π·Π° Π΄ΠΎΡ‡ΠΊΠΎΠΉ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ вывСдСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠΉ ΠΊΠΎΠ΄ (Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅) с Π½Π°ΠΈΠ²Ρ‹ΡΡˆΠΈΠΌ ΡƒΡ€ΠΎΠ²Π½Π΅ΠΌ , Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ if, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠΉ ΠΊΠΎΠ΄ ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π΅Π³ΠΎ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΡŽ. Π”Π°Π»Π΅Π΅ ΠΌΡ‹ Π±Π΅Ρ€Π΅ΠΌ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€ ΠΈΠ· ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° tree ΠΈ Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΡ‚Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌ Π΅Π³ΠΎ. Π’ ΠΈΡ‚ΠΎΠ³Π΅ ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ Ρ‚Ρƒ ΠΆΠ΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ, Π½ΠΎ Π±Π΅Π· Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ступСнСй, ΠΊΠ°ΠΊ Π² ΠΏΠ΅Ρ€Π²ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅. Π’Ρ€Π΅Ρ‚ΠΈΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΊΠΎΡ€Π½Π΅Π²ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ getchildren(). Π’Π°ΠΊ Ρ‡Ρ‚ΠΎ Π½Π°ΠΌ снова понадобится ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΉ Ρ†ΠΈΠΊΠ», Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ всС Ρ‚Π΅Π³ΠΈ Π΄ΠΎΡ‡Π΅Ρ€Π½Π΅Π³ΠΎ ΠΊΠΎΠ΄Π° ΠΈ назначСния. Π’ послСднСм ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΊΠΎΡ€Π½Π΅Π²ΠΎΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ iter() для Ρ†ΠΈΠΊΠ»Π° всСх Ρ‚Π΅Π³ΠΎΠ², ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… строкС β€œbegin”.

Как Π±Ρ‹Π»ΠΎ ΠΎΡ‚ΠΌΠ΅Ρ‡Π΅Π½ΠΎ Π² послСднСм Ρ€Π°Π·Π΄Π΅Π»Π΅, Π²Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ find() ΠΈΠ»ΠΈ findall(), Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±Π»Π΅Π³Ρ‡ΠΈΡ‚ΡŒ поиск ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Ρ… Ρ‚Π΅Π³ΠΎΠ², ΠΈΠ»ΠΈ Π½Π°Π±ΠΎΡ€ Ρ‚Π΅Π³ΠΎΠ² соотвСтствСнно. Π’Π°ΠΊΠΆΠ΅ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Element ΠΈΠΌΠ΅Π΅Ρ‚ свой Ρ‚Π΅Π³ ΠΈ тСкстовоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, этим ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ для получСния Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠΉ Ρ‚ΠΎΡ‡Π½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ.

ПодвСдСм Π˜Ρ‚ΠΎΠ³ΠΈ

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π²Ρ‹ Π·Π½Π°Π΅Ρ‚Π΅, ΠΊΠ°ΠΊ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ minidom для парсинга XML. Π’Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ освоили ElementTree для создания, рСдактирования ΠΈ парсинга XML. Π‘ΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π²Π½Π΅ Python, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°ΡŽΡ‚ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с XML. Π£Π±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ΡΡŒ понятным Π²Π°ΠΌ инструмСнтом, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π΄Π°Π½Π½Ρ‹ΠΉ вопрос ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΡ‡Π΅Π½ΡŒ слоТным ΠΈ нСпонятным, Ссли ΠΏΡ‹Ρ‚Π°Ρ‚ΡŒΡΡ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ Π΅Π³ΠΎ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΌ инструмСнтом.

Являюсь администратором Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΏΠΎΡ€Ρ‚Π°Π»ΠΎΠ² ΠΏΠΎ ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΡŽ языков программирования Python, Golang ΠΈ Kotlin. Π’ составС нСбольшой ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π΅Π΄ΠΈΠ½ΠΎΠΌΡ‹ΡˆΠ»Π΅Π½Π½ΠΈΠΊΠΎΠ², ΠΌΡ‹ занимаСмся популяризациСй языков программирования Π½Π° Ρ€ΡƒΡΡΠΊΠΎΡΠ·Ρ‹Ρ‡Π½ΡƒΡŽ Π°ΡƒΠ΄ΠΈΡ‚ΠΎΡ€ΠΈΡŽ. Π‘ΠΎΠ»ΡŒΡˆΠ°Ρ Ρ‡Π°ΡΡ‚ΡŒ статСй Π±Ρ‹Π»Π° Π°Π΄Π°ΠΏΡ‚ΠΈΡ€ΠΎΠ²Π°Π½Π° Π½Π°ΠΌΠΈ Π½Π° русский язык ΠΈ распространяСтся бСсплатно.

E-mail: [email protected]

ΠžΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅
Universitatea Tehnică a Moldovei (utm.md)

  • 2014 β€” 2018 ВСхничСский УнивСрситСт ΠœΠΎΠ»Π΄ΠΎΠ²Ρ‹, ИВ-Π˜Π½ΠΆΠ΅Π½Π΅Ρ€. Π’Π΅ΠΌΠ° Π΄ΠΈΠΏΠ»ΠΎΠΌΠ½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹ «Автоматизация ΠΏΠΎΠΊΡƒΠΏΠΊΠΈ ΠΈ ΠΏΡ€ΠΎΠ΄Π°ΠΆΠΈ ΠΊΡ€ΠΈΠΏΡ‚ΠΎΠ²Π°Π»ΡŽΡ‚Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ тСхничСский Π°Π½Π°Π»ΠΈΠ·Β»
  • 2018 β€” 2020 ВСхничСский УнивСрситСт ΠœΠΎΠ»Π΄ΠΎΠ²Ρ‹, ΠœΠ°Π³ΠΈΡΡ‚Ρ€, ΠœΠ°Π³ΠΈΡΡ‚Π΅Ρ€ΡΠΊΠ°Ρ диссСртация Β«Π˜Π΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡ Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΠ° Π² кибСрпространствС ΠΏΠΎ Ρ„ΠΎΡ‚ΠΎΠ³Ρ€Π°Ρ„ΠΈΠΈ Π»ΠΈΡ†Π°Β»

1Π‘ ΠΈ Ρ„Π°ΠΉΠ»Ρ‹ XML: запись ΠΈ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅

Рассмотрим возмоТности 1Π‘Β 8.3Β Ρ€Π°Π±ΠΎΡ‚Ρ‹ с XML.

XML – это Ρ€Π°ΡΡˆΠΈΡ€ΡΠ΅ΠΌΡ‹ΠΉ язык Ρ€Π°Π·ΠΌΠ΅Ρ‚ΠΊΠΈ. Π’ 1Π‘ ΡˆΠΈΡ€ΠΎΠΊΠΎ примСняСтся для ΠΎΠ±ΠΌΠ΅Π½Π° Π΄Π°Π½Π½Ρ‹ΠΌΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ конфигурациями, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠ΅ΠΆΠ΄Ρƒ Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ внСшними источниками Π΄Π°Π½Π½Ρ‹Ρ… с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ°.

Рассмотрим Π΄Π²Π° Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° Ρ€Π°Π±ΠΎΡ‚Ρ‹ с XML: срСдствами Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π³ΠΎ языка ΠΈ срСдствами Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π³ΠΎ языка с использованиСм XDTO ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ².

Π§Ρ‚Π΅Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»Π° XML срСдствами Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π³ΠΎ языка 1Π‘

Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ Π½ΠΎΠ²Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚: Π§Ρ‚Π΅Π½ΠΈΠ΅XML. Он позволяСт Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ сообщСния. Π”Π°Π»Π΅Π΅ ΠΏΡ€ΠΈΠ²ΠΎΠΆΡƒ ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠΈΠΉ ΠΊΠΎΠ΄, ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ чтСния ΠΈ Ρ€Π°Π·Π±ΠΎΡ€ΠΊΠΈ XML Ρ„Π°ΠΉΠ»Π°. ПояснСния Π±ΡƒΠ΄Ρƒ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ΡŒ Π² Π²ΠΈΠ΄Π΅ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠ΅Π², Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ Ρ€Π°Π·Ρ€Ρ‹Π²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄ Π½Π° куски ΠΈ Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΡΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ для дальнСйшСго использования.

Π§Ρ‚Π΅Π½ΠΈΠ΅XML = Новый Π§Ρ‚Π΅Π½ΠΈΠ΅XML;

Π§Ρ‚Π΅Π½ΠΈΠ΅XML.ΠžΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒΠ€Π°ΠΉΠ»("d:\Temp\Test.XML");Β  //ΠžΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅ΠΌ Ρ„Π°ΠΉΠ»

Пока Π§Ρ‚Π΅Π½ΠΈΠ΅XML.ΠŸΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ() Π¦ΠΈΠΊΠ»Β  //Π¦ΠΈΠΊΠ» ΠΏΠΎ структурС

Если Π§Ρ‚Π΅Π½ΠΈΠ΅XML.Π’ΠΈΠΏΠ£Π·Π»Π° = Π’ΠΈΠΏΠ£Π·Π»Π°XML.НачалоЭлСмСнта Π’ΠΎΠ³Π΄Π°Β  //ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅ΠΌ Π½Π°Ρ‡Π°Π»ΠΎ элСмСнта

Пока Π§Ρ‚Π΅Π½ΠΈΠ΅XML.ΠŸΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒΠΡ‚Ρ€ΠΈΠ±ΡƒΡ‚() Π¦ΠΈΠΊΠ»

//Π’Π½ΡƒΡ‚Ρ€ΠΈ элСмСнта считываСм Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹

ΠšΠΎΠ½Π΅Ρ†Π¦ΠΈΠΊΠ»Π°;

Π˜Π½Π°Ρ‡Π΅Π•ΡΠ»ΠΈ Π§Ρ‚Π΅Π½ΠΈΠ΅XML.Π’ΠΈΠΏΠ£Π·Π»Π°=Π’ΠΈΠΏΠ£Π·Π»Π°XML.ВСкст Π’ΠΎΠ³Π΄Π°

//Если это тСкст, Ρ‡ΠΈΡ‚Π°Π΅ΠΌ тСкст

Π˜Π½Π°Ρ‡Π΅Π•ΡΠ»ΠΈ Π§Ρ‚Π΅Π½ΠΈΠ΅XML.Π’ΠΈΠΏΠ£Π·Π»Π°=Π’ΠΈΠΏΠ£Π·Π»Π°XML.ΠšΠΎΠ½Π΅Ρ†Π­Π»Π΅ΠΌΠ΅Π½Ρ‚Π° Π’ΠΎΠ³Π΄Π°

//ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅ΠΌ дальнСйшиС дСйствия

ΠšΠΎΠ½Π΅Ρ†Π•ΡΠ»ΠΈ ;

ΠšΠΎΠ½Π΅Ρ†Π¦ΠΈΠΊΠ»Π°;

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, зная структуру Ρ„Π°ΠΉΠ»Π°, ΠΌΠΎΠΆΠ½ΠΎ Π΅Π³ΠΎ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒ Β«ΠΏΠΎ ΠΏΠΎΠ»ΠΎΡ‡ΠΊΠ°ΠΌΒ» Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ 1Π‘.

Π—Π°ΠΏΠΈΡΡŒ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ· 1C Π² XML

Π’Π°ΠΊ ΠΆΠ΅ создадим ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π—Π°ΠΏΠΈΡΡŒXML.

Π—Π°ΠΏΠΈΡΡŒXML = Новый Π—Π°ΠΏΠΈΡΡŒXML;

Π—Π°ΠΏΠΈΡΡŒXML.ΠžΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒΠ€Π°ΠΉΠ»("d:\Temp\Test.XML", "UTF-8"); //ΠžΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅ΠΌ Ρ„Π°ΠΉΠ» для записи, ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΡƒ

Π—Π°ΠΏΠΈΡΡŒXML.Π—Π°ΠΏΠΈΡΠ°Ρ‚ΡŒΠžΠ±ΡŠΡΠ²Π»Π΅Π½ΠΈΠ΅XML();Β  // ЗаписываСм объявлСниС XML

Π—Π°ΠΏΠΈΡΡŒXML.Π—Π°ΠΏΠΈΡΠ°Ρ‚ΡŒΠΠ°Ρ‡Π°Π»ΠΎΠ­Π»Π΅ΠΌΠ΅Π½Ρ‚Π°("ΠžΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ"); // Начало элСмСнта ΠžΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ

Π’Ρ‹Π±ΠΎΡ€ΠΊΠ° = Π‘ΠΏΡ€Π°Π²ΠΎΡ‡Π½ΠΈΠΊΠΈ.ΠžΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ.Π’Ρ‹Π±Ρ€Π°Ρ‚ΡŒ();

Пока Π’Ρ‹Π±ΠΎΡ€ΠΊΠ°.Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ() Π¦ΠΈΠΊΠ»Β  // НачинаСм Π²Ρ‹Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ

Π—Π°ΠΏΠΈΡΡŒXML.Π—Π°ΠΏΠΈΡΠ°Ρ‚ΡŒΠΠ°Ρ‡Π°Π»ΠΎΠ­Π»Π΅ΠΌΠ΅Π½Ρ‚Π°("ΠžΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΡ"); // Начало элСмСнта ΠžΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΡ

Π—Π°ΠΏΠΈΡΡŒXML.Π—Π°ΠΏΠΈΡΠ°Ρ‚ΡŒΠΡ‚Ρ€ΠΈΠ±ΡƒΡ‚("Код",Π‘Ρ‚Ρ€ΠΎΠΊΠ°(Π’Ρ‹Π±ΠΎΡ€ΠΊΠ°.Код));

Π—Π°ΠΏΠΈΡΡŒXML.Π—Π°ΠΏΠΈΡΠ°Ρ‚ΡŒΠΡ‚Ρ€ΠΈΠ±ΡƒΡ‚("НаимСнованиС",Π‘Ρ‚Ρ€ΠΎΠΊΠ°(Π’Ρ‹Π±ΠΎΡ€ΠΊΠ°.НаимСнованиС));

Π—Π°ΠΏΠΈΡΡŒXML.Π—Π°ΠΏΠΈΡΠ°Ρ‚ΡŒΠšΠΎΠ½Π΅Ρ†Π­Π»Π΅ΠΌΠ΅Π½Ρ‚Π°(); // ΠšΠΎΠ½Π΅Ρ† элСмСнта ΠžΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΡ

ΠšΠΎΠ½Π΅Ρ†Π¦ΠΈΠΊΠ»Π°;

Π—Π°ΠΏΠΈΡΡŒXML.Π—Π°ΠΏΠΈΡΠ°Ρ‚ΡŒΠšΠΎΠ½Π΅Ρ†Π­Π»Π΅ΠΌΠ΅Π½Ρ‚Π°(); // ΠšΠΎΠ½Π΅Ρ† элСмСнта ΠžΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΌΡ‹ Π²Ρ‹Π³Ρ€ΡƒΠ·ΠΈΠΌ ΠΊΠΎΠ΄ ΠΈ Π½Π°ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅ всСх ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΉ ΠΈΠ· справочника 1Π‘ Β«ΠžΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈΒ».

Π’Ρ‹Π³Ρ€ΡƒΠ·ΠΊΠ° ΠΈΠ· 1C Π² XML с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ XDTO-ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ²

Если Π²Ρ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π² 1Π‘ ΠΈΠ»ΠΈ просто Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΡΠΈΡΡ‚Π΅ΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ свои знания — ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ Π¨ΠΊΠΎΠ»Ρƒ программирования 1Π‘ нашСго Π΄Ρ€ΡƒΠ³Π° Π’Π»Π°Π΄ΠΈΠΌΠΈΡ€Π° Милькина. ΠŸΠΎΡˆΠ°Π³ΠΎΠ²Ρ‹Π΅ ΠΈ понятныС ΡƒΡ€ΠΎΠΊΠΈ Π΄Π°ΠΆΠ΅ для Π½ΠΎΠ²ΠΈΡ‡ΠΊΠ° с ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ учитСля.
ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ бСсплатно ΠΏΠΎ ссылкС >>

Π’ 1Π‘ прСдприятии сущСствуСт Ρ‚Π°ΠΊΠΎΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊΠ°ΠΊ XDTO-ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹. Они слуТат для ΠΎΠ±ΠΌΠ΅Π½Π° Π΄Π°Π½Π½Ρ‹ΠΌΠΈ Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ XML.

XDTO-ΠΏΠ°ΠΊΠ΅Ρ‚ позволяСт ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ структуру, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΏΠΎΡ‚ΠΎΠΌ ΠΏΠΎΠΉΠ΄Π΅Ρ‚ Π²Ρ‹Π³Ρ€ΡƒΠ·ΠΊΠ° Π΄Π°Π½Π½Ρ‹Ρ…. ΠŸΠΎΠΊΠ°ΠΆΡƒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ‚Π°ΠΊΠΎΠΉ структуры:

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠ² структуру (Π΅Π΅, кстати, ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ ΠΈΠ· Ρ„Π°ΠΉΠ»Π°), ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ смСло ΡΡ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ»:

МойXML = Новый Π—Π°ΠΏΠΈΡΡŒXML;

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹Π—Π°ΠΏΠΈΡΠΈXML = Новый ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹Π—Π°ΠΏΠΈΡΠΈXML("UTF-8", "1.0", Π›ΠΎΠΆΡŒ);

МойXML.ΠžΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒΠ€Π°ΠΉΠ»("d:\Temp\Test.XML", Β ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹Π—Π°ΠΏΠΈΡΠΈXML);

МойXML.Π—Π°ΠΏΠΈΡΠ°Ρ‚ΡŒΠžΠ±ΡŠΡΠ²Π»Π΅Π½ΠΈΠ΅XML();

Π’ΠΈΠΏΠžΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΠΊΡ‚ΠΈΠ²Ρ‹Π’Π‘ΠΈΡΡ‚Π΅ΠΌΠ΅ = Π€Π°Π±Ρ€ΠΈΠΊΠ°XDTO.Π’ΠΈΠΏ("www.primer.ru/assets", "АктивыВБистСмС");

ΠžΠ±ΡŠΠ΅ΠΊΡ‚ΠΠΊΡ‚ΠΈΠ²Ρ‹Π’Π‘ΠΈΡΡ‚Π΅ΠΌΠ΅ = Π€Π°Π±Ρ€ΠΈΠΊΠ°XDTO.Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ(Π’ΠΈΠΏΠžΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΠΊΡ‚ΠΈΠ²Ρ‹Π’Π‘ΠΈΡΡ‚Π΅ΠΌΠ΅);

ΠžΠ±ΡŠΠ΅ΠΊΡ‚ΠΠΊΡ‚ΠΈΠ²Ρ‹Π’Π‘ΠΈΡΡ‚Π΅ΠΌΠ΅.Π”Π°Ρ‚Π°Π’Ρ‹Π³Ρ€ΡƒΠ·ΠΊΠΈ = ВСкущаяДата();

Π’ΠΈΠΏΠžΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΠΊΡ‚ΠΈΠ²Ρ‹ = Π€Π°Π±Ρ€ΠΈΠΊΠ°XDTO.Π’ΠΈΠΏ("www.primer.ru/assets", "Активы");

ΠžΠ±ΡŠΠ΅ΠΊΡ‚ΠΠΊΡ‚ΠΈΠ²Ρ‹ = Π€Π°Π±Ρ€ΠΈΠΊΠ°XDTO.Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ(Π’ΠΈΠΏΠžΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΠΊΡ‚ΠΈΠ²Ρ‹);

ΠžΠ±ΡŠΠ΅ΠΊΡ‚ΠΠΊΡ‚ΠΈΠ²Ρ‹Π’Π‘ΠΈΡΡ‚Π΅ΠΌΠ΅.Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ(Π€ΠΎΡ€ΠΌΠ°XML.Π­Π»Π΅ΠΌΠ΅Π½Ρ‚, "www.primer.ru/assets", "Активы", ΠžΠ±ΡŠΠ΅ΠΊΡ‚ΠΠΊΡ‚ΠΈΠ²Ρ‹);

Π’ΠΈΠΏΠžΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΠΊΡ‚ΠΈΠ² = Π€Π°Π±Ρ€ΠΈΠΊΠ°XDTO.Π’ΠΈΠΏ("www.primer.ru/assets", "Актив");

Пока Π’Ρ‹Π±ΠΎΡ€ΠΊΠ°Π”Π΅Ρ‚Π°Π»ΡŒΠ½Ρ‹Π΅Π—Π°ΠΏΠΈΡΠΈ.Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ() Π¦ΠΈΠΊΠ»

ΠžΠ±ΡŠΠ΅ΠΊΡ‚ΠΠΊΡ‚ΠΈΠ² = Π€Π°Π±Ρ€ΠΈΠΊΠ°XDTO.Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ(Π’ΠΈΠΏΠžΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΠΊΡ‚ΠΈΠ²);

ΠžΠ±ΡŠΠ΅ΠΊΡ‚ΠΠΊΡ‚ΠΈΠ².НаимСнованиС = Π’Ρ‹Π±ΠΎΡ€ΠΊΠ°Π”Π΅Ρ‚Π°Π»ΡŒΠ½Ρ‹Π΅Π—Π°ΠΏΠΈΡΠΈ.НаимСнованиС;

ΠžΠ±ΡŠΠ΅ΠΊΡ‚ΠΠΊΡ‚ΠΈΠ².ISIN = Π’Ρ‹Π±ΠΎΡ€ΠΊΠ°Π”Π΅Ρ‚Π°Π»ΡŒΠ½Ρ‹Π΅Π—Π°ΠΏΠΈΡΠΈ.ISIN;

ΠžΠ±ΡŠΠ΅ΠΊΡ‚ΠΠΊΡ‚ΠΈΠ²Ρ‹.Актив.Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ(ΠžΠ±ΡŠΠ΅ΠΊΡ‚ΠΠΊΡ‚ΠΈΠ²);

ΠšΠΎΠ½Π΅Ρ†Π¦ΠΈΠΊΠ»Π°;

Π€Π°Π±Ρ€ΠΈΠΊΠ°XDTO.Π—Π°ΠΏΠΈΡΠ°Ρ‚ΡŒXML(МойXML, ΠžΠ±ΡŠΠ΅ΠΊΡ‚ΠΠΊΡ‚ΠΈΠ²Ρ‹Π’Π‘ΠΈΡΡ‚Π΅ΠΌΠ΅);

МойXML.Π—Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ();

Π’ΠΎΡ‚ Ρ‚Π°ΠΊ, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠ² Π·Π°Ρ€Π°Π½Π΅Π΅ схСму, ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ» любой слоТности.

Если Π’Ρ‹ Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚Π΅ ΠΈΠ·ΡƒΡ‡Π°Ρ‚ΡŒ 1Π‘ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅, Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅ΠΌ наш бСсплатный курс (Π½Π΅ Π·Π°Π±ΡƒΠ΄ΡŒΡ‚Π΅ ΠΏΠΎΠ΄ΠΏΠΈΡΠ°Ρ‚ΡŒΡΡ Π½Π° YouTube β€” рСгулярно выходят Π½ΠΎΠ²Ρ‹Π΅ Π²ΠΈΠ΄Π΅ΠΎ):

К соТалСнию, ΠΌΡ‹ физичСски Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΡ€ΠΎΠΊΠΎΠ½ΡΡƒΠ»ΡŒΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ бСсплатно всСх ΠΆΠ΅Π»Π°ΡŽΡ‰ΠΈΡ…, Π½ΠΎ наша ΠΊΠΎΠΌΠ°Π½Π΄Π° Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π΄Π° ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ услуги ΠΏΠΎ Π²Π½Π΅Π΄Ρ€Π΅Π½ΠΈΡŽ ΠΈ ΠΎΠ±ΡΠ»ΡƒΠΆΠΈΠ²Π°Π½ΠΈΡŽ 1Π‘. Π‘ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ ΠΎ Π½Π°ΡˆΠΈΡ… услугах ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ·Π½Π°Ρ‚ΡŒ Π½Π° страницС Услуги 1Π‘ ΠΈΠ»ΠΈ просто ΠΏΠΎΠ·Π²ΠΎΠ½ΠΈΡ‚Π΅ ΠΏΠΎ Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½Ρƒ +7 (499) 350 29 00. ΠœΡ‹ Ρ€Π°Π±ΠΎΡ‚Π°Π΅ΠΌ Π² МосквС ΠΈ области.

Бинтаксис XML


БинтаксичСскиС ΠΏΡ€Π°Π²ΠΈΠ»Π° XML ΠΎΡ‡Π΅Π½ΡŒ просты ΠΈ Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹. ΠŸΡ€Π°Π²ΠΈΠ»Π°
просты Π² освоСнии ΠΈ использовании.


XML-Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΊΠΎΡ€Π½Π΅Π²ΠΎΠΉ элСмСнт

XML-Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Ρ‹

Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½ ΠΊΠΎΡ€Π½Π΅Π²ΠΎΠΉ элСмСнт , ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ являСтся
Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒ

всСх ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ… элСмСнтов:

<ΠΊΠΎΡ€Π΅Π½ΡŒ>
<Ρ€Π΅Π±Π΅Π½ΠΎΠΊ>
…..

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ — ΠΊΠΎΡ€Π½Π΅Π²ΠΎΠΉ элСмСнт:

«?>
<ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅>
Π’ΠΎΠ²Π΅
Π―Π½ΠΈ
НапоминаниС
НС Π·Π°Π±Ρ‹Π²Π°ΠΉ мСня Π² эти Π²Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Π΅!


ΠŸΡ€ΠΎΠ»ΠΎΠ³ XML

Π­Ρ‚Π° строка называСтся ΠΏΡ€ΠΎΠ»ΠΎΠ³ΠΎΠΌ XML :

» ?>

ΠŸΡ€ΠΎΠ»ΠΎΠ³ XML Π½Π΅ являСтся ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ.Если ΠΎΠ½ сущСствуСт, ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π΅.

Π”ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Ρ‹ XML

ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΠΌΠ΅ΠΆΠ΄ΡƒΠ½Π°Ρ€ΠΎΠ΄Π½Ρ‹Π΅ символы, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ норвСТский ΓΈΓ¦Γ₯ ΠΈΠ»ΠΈ
Ѐранцузский Γͺèé.

Π’ΠΎ ΠΈΠ·Π±Π΅ΠΆΠ°Π½ΠΈΠ΅ ошибок слСдуСт ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡƒΡŽ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΡƒ ΠΈΠ»ΠΈ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Ρ„Π°ΠΉΠ»Ρ‹ XML.
ΠΊΠ°ΠΊ UTF-8.

UTF-8 — это ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠ° символов ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ для Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² XML.

ΠšΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΡƒ

ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·ΡƒΡ‡ΠΈΡ‚ΡŒ Π² нашСм
Π£Ρ‡Π΅Π±Π½ΠΈΠΊ ΠΏΠΎ Π½Π°Π±ΠΎΡ€Ρƒ символов.

UTF-8 Ρ‚Π°ΠΊΠΆΠ΅ являСтся ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠΎΠΉ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ для HTML5, CSS, JavaScript, PHP ΠΈ SQL.



ВсС элСмСнты XML Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΠΌΠ΅Ρ‚ΡŒ Π·Π°ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ Ρ‚Π΅Π³

Π’ XML нСдопустимо ΠΏΡ€ΠΎΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ Π·Π°ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ Ρ‚Π΅Π³. ВсС элСмСнты Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΠΌΠ΅Ρ‚ΡŒ
Π·Π°ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ Ρ‚Π΅Π³:

Π­Ρ‚ΠΎ Π°Π±Π·Π°Ρ†.

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: Π’ ΠΏΡ€ΠΎΠ»ΠΎΠ³Π΅ XML Π½Π΅Ρ‚ Π·Π°ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰Π΅Π³ΠΎ Ρ‚Π΅Π³Π°!
Π­Ρ‚ΠΎ Π½Π΅ ошибка. ΠŸΡ€ΠΎΠ»ΠΎΠ³ Π½Π΅ являСтся Ρ‡Π°ΡΡ‚ΡŒΡŽ XML-Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°.


XML-Ρ‚Π΅Π³ΠΈ Ρ‡ΡƒΠ²ΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ ΠΊ рСгистру

XML-Ρ‚Π΅Π³ΠΈ Ρ‡ΡƒΠ²ΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ ΠΊ рСгистру.Π’Π΅Π³ отличаСтся ΠΎΡ‚ Ρ‚Π΅Π³Π°
<Π±ΡƒΠΊΠ²Π°>.

ΠžΡ‚ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ ΠΈ Π·Π°ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ Ρ‚Π΅Π³ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ написаны Π² ΠΎΠ΄Π½ΠΎΠΌ рСгистрС:

Π­Ρ‚ΠΎ Π²Π΅Ρ€Π½ΠΎ

Β«ΠžΡ‚ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΠΈΠ΅ ΠΈ Π·Π°ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΠΈΠ΅ Ρ‚Π΅Π³ΠΈΒ» часто Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ Β«ΠΠ°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΈ ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹ΠΌΠΈ Ρ‚Π΅Π³Π°ΠΌΠΈΒ». Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ
Π§Ρ‚ΠΎ Π²Ρ‹ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡ΠΈΡ‚Π°Π΅Ρ‚Π΅. Π­Ρ‚ΠΎ Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‚ΠΎ ΠΆΠ΅ самоС.


Π­Π»Π΅ΠΌΠ΅Π½Ρ‚Ρ‹ XML Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ Π²Π»ΠΎΠΆΠ΅Π½Ρ‹

Π’ HTML Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ элСмСнты:

Π­Ρ‚ΠΎΡ‚ тСкст Π²Ρ‹Π΄Π΅Π»Π΅Π½ ΠΏΠΎΠ»ΡƒΠΆΠΈΡ€Π½Ρ‹ΠΌ курсивом

Π’ XML всС элСмСнты Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ Π²Π»ΠΎΠΆΠ΅Π½Ρ‹ Π΄Ρ€ΡƒΠ³ Π² Π΄Ρ€ΡƒΠ³Π°:

Π­Ρ‚ΠΎΡ‚ тСкст Π²Ρ‹Π΄Π΅Π»Π΅Π½ ΠΏΠΎΠ»ΡƒΠΆΠΈΡ€Π½Ρ‹ΠΌ курсивом

Π’ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π²Ρ‹ΡˆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Β«ΠŸΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ Π²Π»ΠΎΠΆΠ΅Π½ΠΎΒ» просто ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ
элСмСнт открываСтся Π²Π½ΡƒΡ‚Ρ€ΠΈ элСмСнта , ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Π·Π°ΠΊΡ€Ρ‹Ρ‚ Π²Π½ΡƒΡ‚Ρ€ΠΈ
элСмСнт.


ЗначСния Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ² XML Π΄ΠΎΠ»ΠΆΠ½Ρ‹ всСгда ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ Π² ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠ°Ρ…

Π­Π»Π΅ΠΌΠ΅Π½Ρ‚Ρ‹ XML

ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ Π² ΠΏΠ°Ρ€Π°Ρ… имя / Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΊΠ°ΠΊ Π² HTML.

Π’ XML значСния Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ² всСгда Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒΡΡ Π² ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ:


Π’ΠΎΠ²Π΅
Π―Π½ΠΈ


Бсылки Π½Π° ΡŽΡ€ΠΈΠ΄ΠΈΡ‡Π΅ΡΠΊΠΈΠ΅ Π»ΠΈΡ†Π°

НСкоторыС символы ΠΈΠΌΠ΅ΡŽΡ‚ особоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² XML.

Если Π²Ρ‹ помСститС Ρ‚Π°ΠΊΠΎΠΉ символ, ΠΊΠ°ΠΊ «<" Π²Π½ΡƒΡ‚Ρ€ΠΈ элСмСнта XML, ΠΎΠ½ сгСнСрируСт ошибка, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ синтаксичСский Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ Π΅Π΅ ΠΊΠ°ΠΊ Π½Π°Ρ‡Π°Π»ΠΎ Π½ΠΎΠ²ΠΎΠ³ΠΎ элСмСнта.

Π­Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ ошибкС XML:

Π·Π°Ρ€ΠΏΠ»Π°Ρ‚Π° <1000

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ этой ошибки, Π·Π°ΠΌΠ΅Π½ΠΈΡ‚Π΅ символ Β«<Β» ссылкой Π½Π° ΡΡƒΡ‰Π½ΠΎΡΡ‚ΡŒ :

<сообщСниС> Π·Π°Ρ€ΠΏΠ»Π°Ρ‚Π° & lt; 1000

Π’ XML Π΅ΡΡ‚ΡŒ 5 ΠΏΡ€Π΅Π΄ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… ссылок Π½Π° сущности:

& lt; < ΠΌΠ΅Π½Π΅Π΅
& gt;> большС
& amp; ΠΈ ампСрсанд
апостроф
& quot; « ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠ°

Π’ XML строго Π·Π°ΠΏΡ€Π΅Ρ‰Π΅Π½Ρ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ символы <ΠΈ &, Π½ΠΎ Π»ΡƒΡ‡ΡˆΠ΅ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ>
с & gt; Ρ‚Π°ΠΊΠΆΠ΅.


ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ Π² XML

Бинтаксис для написания ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠ΅Π² Π² XML Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π΅Π½ синтаксису HTML:

Π”Π²Π° Ρ‚ΠΈΡ€Π΅ Π² сСрСдинС коммСнтария Π½Π΅ Π΄ΠΎΠΏΡƒΡΠΊΠ°ΡŽΡ‚ΡΡ:


ΠŸΡ€ΠΎΠ±Π΅Π» сохраняСтся Π² XML

XML Π½Π΅ усСкаСт нСсколько ΠΏΡ€ΠΎΠ±Π΅Π»ΠΎΠ² (HTML усСкаСт нСсколько
Π±Π΅Π»Ρ‹Π΅ пространства Π² ΠΎΠ΄Π½ΠΎ Π±Π΅Π»ΠΎΠ΅ пространство):

XML: ΠŸΡ€ΠΈΠ²Π΅Ρ‚ Π’ΡƒΠ²Π΅
HTML: ΠŸΡ€ΠΈΠ²Π΅Ρ‚ Π’ΡƒΠ²Π΅

XML сохраняСт Π½ΠΎΠ²ΡƒΡŽ линию ΠΊΠ°ΠΊ LF

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Windows ΡΠΎΡ…Ρ€Π°Π½ΡΡŽΡ‚ Π½ΠΎΠ²ΡƒΡŽ строку ΠΊΠ°ΠΊ: Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ ΠΊΠ°Ρ€Π΅Ρ‚ΠΊΠΈ ΠΈ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ строки
(CR + LF).

Unix ΠΈ Mac OSX ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ LF.

Π‘Ρ‚Π°Ρ€Ρ‹Π΅ систСмы Mac ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ CR.

XML сохраняСт Π½ΠΎΠ²ΡƒΡŽ строку ΠΊΠ°ΠΊ LF.


Π₯ΠΎΡ€ΠΎΡˆΠΎ сформированный XML

XML-Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΌ Π²Ρ‹ΡˆΠ΅ ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌ синтаксиса, ΡΡ‡ΠΈΡ‚Π°ΡŽΡ‚ΡΡ «Π₯ΠΎΡ€ΠΎΡˆΠΎ
Π€ΠΎΡ€ΠΌΠΈΡ€ΡƒΡŽΡ‚ΡΡ «XML-Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Ρ‹.

БинтаксичСский Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ XML Xerces-C ++

Xerces-C ++ — это ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡŽΡ‰ΠΈΠΉ синтаксичСский Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ XML, написанный Π½Π° пСрСносимом подмноТСствС
C ++.Xerces-C ++ ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ прСдоставлСниС Π²Π°ΡˆΠ΅ΠΌΡƒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡŽ возмоТности чтСния ΠΈ записи.
XML-Π΄Π°Π½Π½Ρ‹Π΅. ΠžΠ±Ρ‰ΠΈΠΉ
Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π° для синтаксичСского Π°Π½Π°Π»ΠΈΠ·Π°, Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ, управлСния ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ XML-Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ².
с использованиСм API DOM, SAX ΠΈ SAX2. Для ввСдСния Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅
с Xerces-C ++ см. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅
Π“ΠΈΠ΄.

Xerces-C ++ Π²Π΅Ρ€Π΅Π½
РСкомСндация XML 1.0
ΠΈ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ связанныС стандарты (см. Ρ€Π°Π·Π΄Π΅Π» Β«Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈΒ» Π½ΠΈΠΆΠ΅).

Анализатор обСспСчиваСт Π²Ρ‹ΡΠΎΠΊΡƒΡŽ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ, ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΈ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠ΅ΠΌΠΎΡΡ‚ΡŒ.Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ
ΠΊΠΎΠ΄, ΠΎΠ±Ρ€Π°Π·Ρ†Ρ‹ ΠΈ докумСнтация ΠΏΠΎ API ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ΡΡ вмСстС с парсСром. Для
пСрСносимости, Π±Ρ‹Π»ΠΎ ΡƒΠ΄Π΅Π»Π΅Π½ΠΎ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½ΠΎΠΌΡƒ использованию шаблонов ΠΈ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½ΠΎΠΌΡƒ использованию
#ifdefs.

Xerces ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ‚ ΡˆΠΈΡ€ΠΎΠΊΠΈΠΌΠΈ возмоТностями Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ. ΠŸΠ°Ρ€ΡΠ΅Ρ€ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для:

  • Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π²Π΅Π±-сСрвСров с ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ XML
  • Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ поколСния, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΡ… XML ΠΊΠ°ΠΊ
    ΠΈΡ… Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ Π΄Π°Π½Π½Ρ‹Ρ…
  • ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° Π»Π΅Ρ‚Ρƒ для создания Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ΠΎΠ² XML
  • ΠžΠ±Π΅ΡΠΏΠ΅Ρ‡Π΅Π½ΠΈΠ΅ цСлостности Π΄Π°Π½Π½Ρ‹Ρ… элСктронного бизнСса, Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½Π½Ρ‹Ρ… Π² XML
  • Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΈΠ½Ρ‚Π΅Ρ€Π½Π°Ρ†ΠΈΠΎΠ½Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… XML-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ

  • БоотвСтствуСт
    • XML 1.0 (Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅ ΠΈΠ·Π΄Π°Π½ΠΈΠ΅), РСкомСндация W3C
    • XML 1.1 (ΠΏΠ΅Ρ€Π²ΠΎΠ΅ ΠΈΠ·Π΄Π°Π½ΠΈΠ΅), рСкомСндация W3C
      (ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: Ρ€Π°Π·Π΄Π΅Π» 2.13 ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½ΠΎΡ€ΠΌΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π½Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½)
    • БпСцификация DOM уровня 1, рСкомСндация W3C ΠΎΡ‚ 1 октября 1998 Π³.
    • DOM Level 2 Core Specification, РСкомСндация W3C ΠΎΡ‚ 13 ноября 2000 Π³.
    • БпСцификация ΠΎΠ±Ρ…ΠΎΠ΄Π° ΠΈ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° DOM уровня 2,
      РСкомСндация W3C ΠΎΡ‚ 13 ноября 2000 Π³.
    • SAX 1.0 ΠΈ SAX 2.0
    • ΠŸΡ€ΠΎΡΡ‚Ρ€Π°Π½ΡΡ‚Π²Π° ΠΈΠΌΠ΅Π½ Π² XML, РСкомСндация W3C ΠΎΡ‚ 14 января 1999 Π³.
    • ΠŸΡ€ΠΎΡΡ‚Ρ€Π°Π½ΡΡ‚Π²Π° ΠΈΠΌΠ΅Π½ Π² XML 1.1, РСкомСндация W3C
    • Π‘Ρ…Π΅ΠΌΠ° XML, Ρ‡Π°ΡΡ‚ΡŒ 1: структура, рСкомСндация W3C 2 мая 2001 Π³.
    • Π‘Ρ…Π΅ΠΌΠ° XML, Ρ‡Π°ΡΡ‚ΡŒ 2: Π’ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ…, РСкомСндация W3C 2 мая 2001 Π³.,
    • Базовая спСцификация DOM уровня 3.0, рСкомСндация W3C ΠΎΡ‚ 7 апрСля 2004 Π³.
    • DOM уровня 3.0 БпСцификация Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΈ сохранСния, рСкомСндация W3C ΠΎΡ‚ 7 апрСля 2004 Π³.
      ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΡΡ‚ΠΈ см. Π’ Ρ€Π°Π·Π΄Π΅Π»Π΅ Β«ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° DOM уровня 3Β».
    • Π’ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ XML (XInclude) 1.0 (Π²Ρ‚ΠΎΡ€ΠΎΠ΅ ΠΈΠ·Π΄Π°Π½ΠΈΠ΅), рСкомСндация W3C ΠΎΡ‚ 15 ноября 2006 Π³.
    • БпСцификация ΠΎΠ±Ρ…ΠΎΠ΄Π° элСмСнтов, рСкомСндация W3C ΠΎΡ‚ 22 дСкабря 2008 Π³.
  • Π˜ΡΡ…ΠΎΠ΄Π½Ρ‹ΠΉ ΠΊΠΎΠ΄, ΠΎΠ±Ρ€Π°Π·Ρ†Ρ‹ ΠΈ докумСнтация ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ΡΡ
  • ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ΅ созданиС ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° XML
  • ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΡ‹Π΅ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΈ, Π²Π°Π»ΠΈΠ΄Π°Ρ‚ΠΎΡ€Ρ‹ ΠΈ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠΈ
  • Высокая ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ
  • НастраиваСмая ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ошибок

Если Π²Ρ‹ ΠΈΡ‰Π΅Ρ‚Π΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ старом Xerces 2.Икс
Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°, ΠΈΠΌΠ΅ΠΉΡ‚Π΅ Π² Π²ΠΈΠ΄Ρƒ, Ρ‡Ρ‚ΠΎ Xerces 2.8.0 ΠΈ всС Π±ΠΎΠ»Π΅Π΅ Ρ€Π°Π½Π½ΠΈΠ΅ выпуски
Π½Π° 100% Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ ΠΈ большС Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ прилоТСниями.

Π’ Ρ‡Π΅ΠΌ Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ XML ΠΈ C, C ++ ΠΈΠ»ΠΈ Java?

Π’Π°ΡˆΠ° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Π½Π°ΡˆΠΈΡ… Ρ€Π΅ΠΊΠ»Π°ΠΌΠΎΠ΄Π°Ρ‚Π΅Π»Π΅ΠΉ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΡŒ расходы Π½Π° хостинг, исслСдованиС ΠΈ обслуТиваниС этого FAQ

C ΠΈ C ++ (ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ языки, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ FORTRAN ΠΈΠ»ΠΈ Pascal,
ΠΈΠ»ΠΈ Visual Basic, ΠΈΠ»ΠΈ Java ΠΈΠ»ΠΈ сотни Π΄Ρ€ΡƒΠ³ΠΈΡ…)
языков программирования с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ Π²Ρ‹
ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ расчСты, дСйствия ΠΈ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ
Π² порядкС:

mod curconfig [Ссли left (date, 6) = "01 апрСля",
    Ρ‚.поставил "ΠŸΠ΅Ρ€Π²ΠΎΠ°ΠΏΡ€Π΅Π»ΡŒΡΠΊΠ°Ρ!",
    f.пуск Π΄Π½Π΅ΠΉ ('31102011', 'Π”Π”ΠœΠœΠ“Π“Π“Π“') -
          Π΄Π½Π΅ΠΉ (Π΄Π°Ρ‚Π°, "Π”Π”ΠœΠœΠ“Π“Π“Π“")
    «большС Π΄Π½Π΅ΠΉ ΠΏΠΎΠΊΡƒΠΏΠΎΠΊ Π² Π‘Π°ΠΌΠ°ΠΉΠ½Β»];

XML — это язык спСцификации Ρ€Π°Π·ΠΌΠ΅Ρ‚ΠΊΠΈ, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π²Ρ‹
ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ способы описания ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ (тСкст ΠΈΠ»ΠΈ Π΄Π°Π½Π½Ρ‹Π΅),
ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ для хранСния, ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ ΠΈΠ»ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ
ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°. Π’ Π½Π΅ΠΌ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ говорится ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π²Π°ΠΌ слСдуСт Π΄Π΅Π»Π°Ρ‚ΡŒ с
Π΄Π°Π½Π½Ρ‹Π΅ (хотя ваш Π²Ρ‹Π±ΠΎΡ€ ΠΈΠΌΠ΅Π½ элСмСнтов ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°ΠΌΠ΅ΠΊΠ½ΡƒΡ‚ΡŒ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ
они для):


   Π‘Ρ‚ΠΎΠΏΠΎΡ€Π½ΠΎΠ΅ стопорноС ΠΊΠΎΠ»ΡŒΡ†ΠΎ подшипника ΠΊΠΎΠ½Ρ†Π° Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ Π²Π°Π»Π° 
  
   Ringtown Fasteners Ltd 
   Π˜Π½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚ для вставки  с острым носом 
    трСбуСтся для снятия ΠΈ Π·Π°ΠΌΠ΅Π½Ρ‹ этой Π΄Π΅Ρ‚Π°Π»ΠΈ.

Π‘Π°ΠΌ ΠΏΠΎ сСбС Ρ„Π°ΠΉΠ» XML (Π²ΠΊΠ»ΡŽΡ‡Π°Ρ HTML) Π½Π΅
Π΄Π΅Π»Π°Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ ΡƒΠ³ΠΎΠ΄Π½ΠΎ. Π­Ρ‚ΠΎ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ
просто сидит Ρ‚Π°ΠΌ, ΠΏΠΎΠΊΠ° Π²Ρ‹ Π½Π΅ запуститС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, которая Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚
с ΠΈΡ‚. Π‘ΠΌ. Π’Π°ΠΊΠΆΠ΅ вопрос ΠΎ
ΠΊΠ°ΠΊ Π±Π΅ΠΆΠ°Ρ‚ΡŒ ΠΈΠ»ΠΈ
Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Ρ„Π°ΠΉΠ»Ρ‹ XML.

XSLT2 ΠΈ XSL: FO

Π’ΠΎΠ΄Π° мутится ΠΈΠ·-Π·Π° Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ самыС популярныС
языки ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠΉ (XSLT2 ΠΈ XSL: FO) ΡΠ²Π»ΡΡŽΡ‚ΡΡ
фактичСски написаны Π² синтаксисС XML, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ
Π΄Π΅ΠΊΠ»Π°Ρ€Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ, Π° Π½Π΅ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π½Ρ‹ΠΉ.Π’ этих особых случаях Π²Ρ‹
ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ «выполняСт»
XML-Ρ„Π°ΠΉΠ», запустив ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€
Saxon , ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ составляСт
Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹, ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Π΅ Π² Ρ„Π°ΠΉΠ»Π°Ρ…, Π² Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄ Java для
ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ XML-Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Ρ‹. Π’ этом смыслС ΠΌΠΎΠΆΠ½ΠΎ ΡΡ€Π°Π²Π½ΠΈΡ‚ΡŒ
ΠΈΡ… с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ языками программирования, Π½ΠΎ Π²Ρ‹ Π±Ρ‹
сравнСниС языковых возмоТностСй, Π° Π½Π΅ синтаксиса XML Π²
ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ½ΠΈ написаны.

Уильям Π₯Π°ΠΌΠΌΠΎΠ½Π΄ ΠΏΠΈΡˆΠ΅Ρ‚:

(Π² ΡΡ‚Π°Ρ‚ΡŒΠ΅
)

SGML — это катСгория Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°
Ρ‚ΠΈΠΏΡ‹ »с настраиваСмым ΠΎΠ±Ρ‰ΠΈΠΌ синтаксисом,
Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, классичСский HTML) Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ скомпилированы Π²
ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ исполняСмыС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. XML — это подкатСгория SGML
с синтаксичСскими ограничСниями. НапримСр, с XML
ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ Ρ‚ΠΈΠΏΠ° Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° всСгда чувствитСлСн ΠΊ рСгистру,
Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ с SGML ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ чувствитСлСн ΠΊ рСгистру ΠΈΠ»ΠΈ рСгистр
Π½Π΅Ρ‡ΡƒΠ²ΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ. Π’Π°ΠΊ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, классичСский HTML — это SGML.
Ρ‚ΠΈΠΏ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°, Π° XHTML + MathML — это XML-Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚
Ρ‚ΠΈΠΏ.

Π₯отя Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‚
языки Ρ€Π°Π·ΠΌΠ΅Ρ‚ΠΊΠΈ, Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ‚ΠΈΠΏΡ‹ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ CTAN
запись) ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Ρ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для структурированных Π΄Π°Π½Π½Ρ‹Ρ… […]

Π― ΡΠ΅Ρ€ΡŒΠ΅Π·Π½ΠΎ сомнСваюсь, ΠΎΠ΄Π½Π°ΠΊΠΎ, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½Ρ‹ΠΉ язык
ΠΊΠ°ΠΊ C Π² любом Ρ€Π°Π·ΡƒΠΌΠ½ΠΎΠΌ смыслС эквивалСнтСн SGML
Ρ‚ΠΈΠΏ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°.

Как Ρ€Π°Π·Π±ΠΈΡ€Π°Ρ‚ΡŒ XML Π² C ++ — Linux Подсказка

Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ собираСмся ΠΎΠ±ΡΡƒΠ΄ΠΈΡ‚ΡŒ, ΠΊΠ°ΠΊ Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ XML Π½Π° языкС программирования C ++. ΠœΡ‹ ΡƒΠ²ΠΈΠ΄ΠΈΠΌ нСсколько Ρ€Π°Π±ΠΎΡ‡ΠΈΡ… ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ², Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ½ΡΡ‚ΡŒ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ синтаксичСского Π°Π½Π°Π»ΠΈΠ·Π° XML Π² C ++.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ XML?

XML — это язык Ρ€Π°Π·ΠΌΠ΅Ρ‚ΠΊΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π² основном ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для хранСния ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Π΄Π°Π½Π½Ρ‹Ρ… Π² ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠΌ порядкС. XML ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ Ρ€Π°ΡΡˆΠΈΡ€ΡΠ΅ΠΌΡ‹ΠΉ язык Ρ€Π°Π·ΠΌΠ΅Ρ‚ΠΊΠΈ. Он ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΡ…ΠΎΠΆ Π½Π° HTML. XML ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ Π½Π° Ρ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Ρƒ Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‚ΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ HTML ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для отобраТСния Π΄Π°Π½Π½Ρ‹Ρ… Π² Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π΅.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Ρ„Π°ΠΉΠ»Π° XML / синтаксиса XML

Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ XML-Ρ„Π°ΠΉΠ»Π°:

Tom

Drake

Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ HTML, это язык Ρ€Π°Π·ΠΌΠ΅Ρ‚ΠΊΠΈ, ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Π½Π° Ρ‚Π΅Π³ΠΈ, ΠΈ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ наш собствСнный Ρ‚Π΅Π³ Π² Ρ„Π°ΠΉΠ»Π΅ XML.Π’ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π²Ρ‹ΡˆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Ρƒ нас Π΅ΡΡ‚ΡŒ нСсколько ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΡ… Ρ‚Π΅Π³ΠΎΠ², Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ «». Π£ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Ρ‚Π΅Π³Π° Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹ΠΉ Ρ‚Π΅Π³. «» — это ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹ΠΉ Ρ‚Π΅Π³ для «». ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΡ… Ρ‚Π΅Π³ΠΎΠ², сколько Π·Π°Ρ…ΠΎΡ‚ΠΈΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΈΡΡ‚Π΅ΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅.

Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ синтаксичСского Π°Π½Π°Π»ΠΈΠ·Π° Π² C ++:

Π‘ΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ для Π°Π½Π°Π»ΠΈΠ·Π° XML-Π΄Π°Π½Π½Ρ‹Ρ… Π½Π° Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ языков программирования высокого уровня. C ++ Π½Π΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅. Π’ΠΎΡ‚ самыС популярныС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ C ++ для Π°Π½Π°Π»ΠΈΠ·Π° XML-Π΄Π°Π½Π½Ρ‹Ρ…:

  1. RapidXML
  2. PugiXML
  3. TinyXML

Как слСдуСт ΠΈΠ· названия, RapidXML Π² основном ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ Π½Π° ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ ΠΈ прСдставляСт собой Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ синтаксичСского Π°Π½Π°Π»ΠΈΠ·Π° Π² стилС DOM.PugiXML ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Unicode. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ PugiXML, Ссли Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ UTF-16 Π² UTF-8. TinyXML — это минимальная вСрсия для Π°Π½Π°Π»ΠΈΠ·Π° XML-Π΄Π°Π½Π½Ρ‹Ρ…, которая Π½Π΅ такая быстрая ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с двумя ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΌΠΈ. Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ просто Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ свою Ρ€Π°Π±ΠΎΡ‚Ρƒ ΠΈ Π½Π΅ Π·Π°Π±ΠΎΡ‚ΠΈΡ‚Π΅ΡΡŒ ΠΎ скорости, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ TinyXML.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹
Π’Π΅ΠΏΠ΅Ρ€ΡŒ Ρƒ нас Π΅ΡΡ‚ΡŒ Π±Π°Π·ΠΎΠ²ΠΎΠ΅ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ XML ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ синтаксичСского Π°Π½Π°Π»ΠΈΠ·Π° XML Π² C ++. Π”Π°Π²Π°ΠΉΡ‚Π΅ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ рассмотрим нСсколько ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² для синтаксичСского Π°Π½Π°Π»ΠΈΠ·Π° XML-Ρ„Π°ΠΉΠ»Π° Π½Π° C ++:

  • ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 1: синтаксичСский Π°Π½Π°Π»ΠΈΠ· XML Π² C ++ с использованиСм RapidXML
  • ΠŸΡ€ΠΈΠΌΠ΅Ρ€-2: Анализ XML Π² C ++ с использованиСм PugiXML
  • ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 3: Анализ XML Π² C ++ с использованиСм TinyXML

Π’ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΈΠ· этих ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ для Π°Π½Π°Π»ΠΈΠ·Π° ΠΎΠ±Ρ€Π°Π·Ρ†Π° XML-Ρ„Π°ΠΉΠ»Π°.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€-1: синтаксичСский Π°Π½Π°Π»ΠΈΠ· XML Π² C ++ с использованиСм RapidXML

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΌΡ‹ продСмонстрируСм, ΠΊΠ°ΠΊ Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ xml с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ RapidXML Π½Π° C ++. Π’ΠΎΡ‚ Π²Ρ…ΠΎΠ΄Π½ΠΎΠΉ XML-Ρ„Π°ΠΉΠ» (sample.xml):

Π”ΠΆΠΎΠ½

Sean

Π‘Π°Ρ€Π°

Наша Ρ†Π΅Π»ΡŒ — ΠΏΡ€ΠΎΠ°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ Π²Ρ‹ΡˆΠ΅ XML-Ρ„Π°ΠΉΠ» с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ C ++.Π’ΠΎΡ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π½Π° C ++ для Π°Π½Π°Π»ΠΈΠ·Π° XML-Π΄Π°Π½Π½Ρ‹Ρ… с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ RapidXML. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΊΠ°Ρ‡Π°Ρ‚ΡŒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ RapidXML ΠΎΡ‚ΡΡŽΠ΄Π°.

#include
#include
#include
#include «rapidxml.hpp»

с использованиСм пространства ΠΈΠΌΠ΅Π½ std;
с использованиСм пространства ΠΈΠΌΠ΅Π½ rapidxml;

xml_document <> doc
xml_node <> * root_node = NULL;

int main (void)
{
cout << "\ nΠŸΠ°Ρ€ΡΠΈΠ½Π³ Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΠΎΠΈΡ… студСнтов (sample.xml) ....." << endl; // ΠŸΡ€ΠΎΡ‡Ρ‚ΠΈΡ‚Π΅ ΠΎΠ±Ρ€Π°Π·Π΅Ρ†.xml Ρ„Π°ΠΉΠ»
ifstream theFile («sample.xml»);
Π²Π΅ΠΊΡ‚ΠΎΡ€Π½Ρ‹ΠΉ Π±ΡƒΡ„Π΅Ρ€ ((istreambuf_iterator (theFile)), istreambuf_iterator ());
buffer.push_back (‘\ 0’);

// Π Π°Π·Π±ΠΈΡ€Π°Π΅ΠΌ Π±ΡƒΡ„Π΅Ρ€
doc.parse <0> (& buffer [0]);

// Π£Π·Π½Π°Π΅ΠΌ ΠΊΠΎΡ€Π½Π΅Π²ΠΎΠΉ ΡƒΠ·Π΅Π»
root_node = doc.first_node («MyStudentsData»);

// ΠŸΠ΅Ρ€Π΅Π±ΠΈΡ€Π°Π΅ΠΌ ΡƒΠ·Π»Ρ‹ ΡƒΡ‡Π΅Π½ΠΈΠΊΠΎΠ²
для (xml_node <> * student_node = root_node-> first_node («Student»); student_node; student_node = student_node-> next_sibling ())
{
cout << "\ nStudent Type = "<< студСнчСский_ΡƒΠ·Π΅Π»-> ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ_Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ (» учСничСский_Ρ‚ΠΈΠΏ «) -> Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ();
cout << endl; // ВзаимодСйствиС с ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ учащихся
для (xml_node <> * student_name_node = student_node-> first_node («Name»); student_name_node; student_name_node = student_name_node-> next_sibling ())
{
cout << "Student Name =" << имя_студСнта_ΡƒΠ·Π΅Π»-> Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ();
cout << endl;
}
cout << endl;
}

Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ 0;
}

ΠŸΡ€ΠΈΠΌΠ΅Ρ€-2: Анализ XML Π² C ++ с использованиСм PugiXML

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΌΡ‹ продСмонстрируСм, ΠΊΠ°ΠΊ Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ xml с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ PugiXML Π½Π° C ++.Π’ΠΎΡ‚ Π²Ρ…ΠΎΠ΄Π½ΠΎΠΉ XML-Ρ„Π°ΠΉΠ» (sample.xml):

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΌΡ‹ продСмонстрируСм, ΠΊΠ°ΠΊ Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ xml с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ pugixml Π½Π° C ++.Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΊΠ°Ρ‡Π°Ρ‚ΡŒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ PugiXML ΠΎΡ‚ΡΡŽΠ΄Π°.

#include
#include «pugixml.hpp»

с использованиСм пространства ΠΈΠΌΠ΅Π½ std;
с использованиСм пространства ΠΈΠΌΠ΅Π½ pugi;

int main ()
{
cout << "\ nΠŸΠ°Ρ€ΡΠΈΠ½Π³ Π΄Π°Π½Π½Ρ‹Ρ… сотрудников (sample.xml) ..... \ n \ n";
xml_document doc;

// Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅ΠΌ XML-Ρ„Π°ΠΉΠ»
if (! Doc.load_file («sample.xml»)) return -1;

xml_node tools = doc.child («EmployeesData»). Child («Π‘ΠΎΡ‚Ρ€ΡƒΠ΄Π½ΠΈΠΊΠΈ»);

для (xml_node_iterator it = tools.Π½Π°Ρ‡ΠΈΠ½Π°Ρ‚ΡŒ(); это! = tools.end (); ++ it)
{
cout << "Π‘ΠΎΡ‚Ρ€ΡƒΠ΄Π½ΠΈΠΊΠΈ:";

для (xml_attribute_iterator ait = it-> attributes_begin (); ait! = It-> attributes_end (); ++ ait)
{
cout << "" << ait-> name () << "=" < value ();
}

cout << endl;
}

cout << endl; Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ 0; }

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 3: синтаксичСский Π°Π½Π°Π»ΠΈΠ· XML Π² C ++ с использованиСм TinyXML

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΌΡ‹ продСмонстрируСм, ΠΊΠ°ΠΊ Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ xml с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ TinyXML Π½Π° C ++.Π’ΠΎΡ‚ Π²Ρ…ΠΎΠ΄Π½ΠΎΠΉ XML-Ρ„Π°ΠΉΠ» (sample.xml):

Π”ΠΆΠΎΠ½

Π¨ΠΎΠ½

Π‘Π°Ρ€Π°

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΌΡ‹ продСмонстрируСм, ΠΊΠ°ΠΊ Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ xml с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ TinyXML Π½Π° C ++. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΊΠ°Ρ‡Π°Ρ‚ΡŒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ TinyXML ΠΎΡ‚ΡΡŽΠ΄Π°.

#include
#include
#include
#include «tinyxml2.cpp «

с использованиСм пространства ΠΈΠΌΠ΅Π½ std;
с использованиСм пространства ΠΈΠΌΠ΅Π½ tinyxml2;

int main (void)
{
cout <<" \ nΠŸΠ°Ρ€ΡΠΈΠ½Π³ Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΠΎΠΈΡ… ΡƒΡ‡Π΅Π½ΠΈΠΊΠΎΠ² (sample.xml) ..... "<< endl; / / ΠŸΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ» sample.xml
XMLDocument doc;
doc.LoadFile («sample.xml»);

const char * title = doc.FirstChildElement («MyStudentsData») -> FirstChildElement («Student») -> GetText ( );
printf («Π˜ΠΌΡ учащСгося:% s \ n», Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ);

XMLText * textNode = doc.LastChildElement («MyStudentsData») -> LastChildElement («Student») -> FirstChild () -> ToText ();
Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ = тСкстовый ΡƒΠ·Π΅Π»-> Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ();
printf («Π˜ΠΌΡ учащСгося:% s \ n», Ρ‚ΠΈΡ‚ΡƒΠ»);

Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ 0;
}

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ ΠΊΡ€Π°Ρ‚ΠΊΠΎ обсудили XML ΠΈ рассмотрСли Ρ‚Ρ€ΠΈ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° синтаксичСского Π°Π½Π°Π»ΠΈΠ·Π° XML Π² C ++. TinyXML — это минималистичная Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° для Π°Π½Π°Π»ΠΈΠ·Π° XML-Π΄Π°Π½Π½Ρ‹Ρ…. Π‘ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ программистов Π² основном ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ RapidXML ΠΈΠ»ΠΈ PugiXML для Π°Π½Π°Π»ΠΈΠ·Π° XML-Π΄Π°Π½Π½Ρ‹Ρ….

Π£Ρ‡Π΅Π±Π½ΠΎΠ΅ пособиС ΠΏΠΎ схСмС

XML — ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ элСмСнтов ΠΈ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ²

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅

Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Ρ… слоТных Ρ‚ΠΈΠΏΠΎΠ²

Xs: complexType Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ глобально ΠΈ ΠΈΠΌΠ΅Ρ‚ΡŒ имя. ПослС этого ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹Π΅ xs: complexTypes ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π²
schema, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ имССтся прямая ссылка ΠΈΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² качСствС основы для опрСдСлСния Π΄Ρ€ΡƒΠ³ΠΈΡ… xs: complexTypes. Π­Ρ‚ΠΎ позволяСт ΠΏΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ большС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°
ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ структуры Π΄Π°Π½Π½Ρ‹Ρ…, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ ΠΏΡ€ΠΎΡ‰Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΈ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ.

Π•Ρ‰Π΅ Ρ€Π°Π· посмотрСв Π½Π° наш ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π±Ρ‹Π»ΠΎ Π±Ρ‹ Π³ΠΎΡ€Π°Π·Π΄ΠΎ Ρ€Π°Π·ΡƒΠΌΠ½Π΅Π΅ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΎΠ΄Π½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ для «АдрСса», ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π·Π°Ρ‚Π΅ΠΌ ΠΌΠΎΠ³Π»ΠΎ Π±Ρ‹
ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΊΠ°ΠΊ Π·Π°ΠΊΠ°Π·Ρ‡ΠΈΠΊΠΎΠΌ, Ρ‚Π°ΠΊ ΠΈ поставщиком. ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ это, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠ² Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹ΠΉ (Π½Π°Π·Π²Π°Π½Π½Ρ‹ΠΉ) xs: complexType:


    
        
        
    

 

ΠŸΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠ΅ опрСдСлСния XSD графичСски ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°ΡŽΡ‚ΡΡ Π² Liquid Studio ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΡ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠ»ΠΈ , ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ описываСт нашС прСдставлСниС адрСса, поэтому Π΄Π°Π²Π°ΠΉΡ‚Π΅ Π΅Π³ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡΡ.РаньшС, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹
Π½Π°Ρ‡Π°Π»ΠΈ ΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π½Π° элСмСнты, ΠΌΡ‹ сказали, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ свои собствСнныС Ρ‚ΠΈΠΏΡ‹ вмСсто использования ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· стандартных Ρ‚ΠΈΠΏΠΎΠ², Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ xs: string
ΠΈΠ»ΠΈ xs: integer, ΠΈ это ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ сСйчас Π΄Π΅Π»Π°Π»ΠΈ.


    
        
            
            
        
    


    
        
            
            
        
    

 

ΠŸΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠ΅ опрСдСлСния XSD графичСски ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°ΡŽΡ‚ΡΡ Π² Liquid Studio ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

НадСюсь, прСимущСства ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½Ρ‹.ВмСсто Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ адрСс Π΄Π²Π°ΠΆΠ΄Ρ‹ (ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π· для ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° ΠΈ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π· для поставщика), Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Ρƒ нас Π΅ΡΡ‚ΡŒ ΠΎΠ΄Π½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅. Π­Ρ‚ΠΎ ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ обслуТиваниС, Ρ‚.Π΅. Ссли Π²Ρ‹ Ρ€Π΅ΡˆΠΈΡ‚Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ элСмСнты Β«Line3Β» ΠΈΠ»ΠΈ Β«ΠŸΠΎΡ‡Ρ‚ΠΎΠ²Ρ‹ΠΉ индСкс» ΠΊ своСму адрСсу, Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΈΡ… Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² ΠΎΠ΄Π½ΠΎΠΌ мСстС.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ XML
<Π—Π°ΠΊΠ°Π·Ρ‡ΠΈΠΊ>
     2000-01-12T12: 13: 14Z 
    <АдрСс>
         Π“Π΄Π΅-Ρ‚ΠΎ Π½Π° ΡƒΠ»ΠΈΡ†Π΅ 34 
         sometown, ww1 8uu 
    

<ΠŸΠΎΡΡ‚Π°Π²Ρ‰ΠΈΠΊ>
     0123987654 
    <АдрСс>
         22 Π² любом мСстС, Π³Π΄Π΅-Π½ΠΈΠ±ΡƒΠ΄ΡŒ 
         sometown, ss1 6gy 
    

 
Π‘Π°Π½ΠΊΠ½ΠΎΡ‚Ρ‹

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅. Волько слоТныС Ρ‚ΠΈΠΏΡ‹, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ глобально (ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠ΅ элСмСнты элСмСнта ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ собствСнноС имя ΠΈ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π²ΠΎ всСй схСмС).Если ΠΎΠ½ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ Π²Π½ΡƒΡ‚Ρ€ΠΈ , ΠΎΠ½ΠΈ Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΈΠΌΠ΅Π½ΠΈ (Π°Π½ΠΎΠ½ΠΈΠΌΠ½ΠΎ) ΠΈ Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Ρ‹ Π³Π΄Π΅-Π»ΠΈΠ±ΠΎ Π΅Ρ‰Π΅.

ΠšΠΎΠ½ΠΊΡƒΡ€ΠΈΡ€ΡƒΠ΅Ρ‚ с C ΠΏΡ€ΠΈ Ρ€Π°Π·Π±ΠΎΡ€Π΅ XML

Π’ этом постС ΠΌΡ‹ рассмотрим синтаксичСский Π°Π½Π°Π»ΠΈΠ· XML Π² Haskell, Π΅Π³ΠΎ сравнСниС с эффСктивным синтаксичСским Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠΌ C ΠΈ шаги, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€Π΅Π΄ΠΏΡ€ΠΈΠ½ΡΡ‚ΡŒ Π² Haskell для создания быстрой Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ с нуля. ΠœΡ‹ собираСмся ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ ΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒΡΡ ΠΈ Π·Π°ΠΏΠ°Ρ‡ΠΊΠ°Ρ‚ΡŒ Ρ€ΡƒΠΊΠΈ.

НовСнький на блокС

НСсколько нСдСль Π½Π°Π·Π°Π΄ Нил ΠœΠΈΡ‚Ρ‡Π΅Π»Π» ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π» Π² Π±Π»ΠΎΠ³Π΅ сообщСниС ΠΎ Π½ΠΎΠ²ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ XML, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΎΠ½ написал.ΠŸΠ°Ρ€ΡΠ΅Ρ€ написан Π½Π° C, Π° API написан Π½Π° Haskell, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ C. ΠŸΠΈΡˆΠ΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΎΡ‡Π΅Π½ΡŒ быстро:

Hexml Π±Ρ‹Π» Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½ для скорости. Π’ ΠΎΡ‡Π΅Π½ΡŒ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½Ρ‹Ρ… тСстах, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ я сдСлал, ΠΎΠ½ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π±ΠΎΠ»Π΅Π΅ Ρ‡Π΅ΠΌ Π² 2 Ρ€Π°Π·Π° быстрСС ΠΏΡ€ΠΈ синтаксичСском Π°Π½Π°Π»ΠΈΠ·Π΅, Ρ‡Π΅ΠΌ Pugixml, Π³Π΄Π΅ Pugixml являСтся Π·ΠΎΠ»ΠΎΡ‚Ρ‹ΠΌ стандартом для быстрых синтаксичСских Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠ² XML DOM. Π’ ΠΌΠΎΠ΅ΠΌ использовании ΠΎΠ½ ΠΏΡ€Π΅Π²Ρ€Π°Ρ‚ΠΈΠ» синтаксичСский Π°Π½Π°Π»ΠΈΠ· XML ΠΈΠ· ΡƒΠ·ΠΊΠΎΠ³ΠΎ мСста Π² Π½Π΅Π½ΡƒΠΆΠ½ΠΎΠ΅, поэтому ΠΎΠ½ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ для мСня.

Π§Ρ‚ΠΎΠ±Ρ‹ Π΄ΠΎΡΡ‚ΠΈΡ‡ΡŒ этой скорости, ΠΎΠ½ ΠΆΡƒΠ»ΡŒΠ½ΠΈΡ‡Π°Π΅Ρ‚, Π½Π΅ выполняя ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΅ΠΌΡƒ Π½Π΅ Π²Π°ΠΆΠ½Ρ‹:

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ‚Π°ΠΊΡƒΡŽ β€‹β€‹ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ, Hexml Ρ‡ΠΈΡ‚Π΅Ρ€.Π’ основном ΠΎΠ½ Π½Π΅ выполняСт Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ сущностСй, поэтому & amp; остаСтся ΠΊΠ°ΠΊ & amp; Π½Π° Π²Ρ‹Ρ…ΠΎΠ΄Π΅. Он Ρ‚Π°ΠΊΠΆΠ΅ Π½Π΅ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ Ρ€Π°Π·Π΄Π΅Π»Ρ‹ CData (Π½ΠΎ это ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ я Π»Π΅Π½ΠΈΠ²), ΠΈ мСста ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠ΅Π² Π½Π΅ Π·Π°ΠΏΠΎΠΌΠΈΠ½Π°ΡŽΡ‚ΡΡ. Он Ρ‚Π°ΠΊΠΆΠ΅ Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ с большСй Ρ‡Π°ΡΡ‚ΡŒΡŽ стандарта XML, игнорируя ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π» DOCTYPE . [..] Π― Ρ€Π°Π±ΠΎΡ‚Π°ΡŽ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с UTF8, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ для Ρ‚Π΅Ρ… Π±ΠΈΡ‚ΠΎΠ² UTF8, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ мСня Π²ΠΎΠ»Π½ΡƒΡŽΡ‚, совпадаСт с ASCII — ΠΌΠ½Π΅ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ Π΄Π΅ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ символы.

ΠœΠΎΡˆΠ΅Π½Π½ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ — это Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ, Ссли Π²Ρ‹ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ ΠΎΠΏΠΈΡˆΠ΅Ρ‚Π΅, ΠΊΠ°ΠΊ ΠΆΡƒΠ»ΡŒΠ½ΠΈΡ‡Π°Ρ‚ΡŒ.Π­Ρ‚ΠΎ просто мСняСт ΠΏΡ€Π°Π²ΠΈΠ»Π° ΠΈΠ³Ρ€Ρ‹!

Но Ρƒ C ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹

Π­Ρ‚ΠΎΡ‚ пост ΠΏΡ€ΠΈΠ²Π»Π΅ΠΊ ΠΌΠΎΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΌΠ½Π΅ показалось ΠΆΠ°Π»ΠΊΠΈΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ C. НСзависимо ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ Π»ΠΈ Π²Ρ‹ Haskell, Python ΠΈΠ»ΠΈ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π΅Ρ‰Π΅, Π΅ΡΡ‚ΡŒ нСсколько ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ с ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΎΠΌ Π½Π° C с вашСго языка высокого уровня:

  • ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π±ΠΎΠ»Π΅Π΅ вСроятна segfault. Π― сдСлаю ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΠΏΠΎΠ²ΠΎΠ΄Ρƒ segfault Π² любой дСнь!
  • ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Π° для Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠΉ эксплуатации ΠΈΠ·-Π·Π° нСдостаточной бСзопасности памяти.
  • Если люди хотят Ρ€Π°ΡΡˆΠΈΡ€ΠΈΡ‚ΡŒ вашС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ΅ обСспСчСниС, ΠΎΠ½ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ C, Π° Π½Π΅ ваш язык высокого уровня.
  • ΠŸΠ΅Ρ€Π΅Π½ΠΎΡΠΈΠΌΠΎΡΡ‚ΡŒ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Windows) — Π·Π°Π½ΠΎΠ·Π° Π² Π·Π°Π΄Π½ΠΈΡ†Π΅ с C.

РазумССтся, это Π±Ρ‹Π»ΠΎ Π½Π΅Π·Π°Π΄ΠΎΠ»Π³ΠΎ Π΄ΠΎ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠžΡΡ‚ΠΈΠ½ Π‘ΠΈΠΏΠΏ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π» ΠΊΡ€Π°Ρ‚ΠΊΠΎΠ΅ ΠΈΠ·Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ошибок Π² ΠΊΠΎΠ΄Π΅ C:

На Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚, ΠΈΠ·Π²ΠΈΠ½ΠΈΡ‚Π΅, я Π±Ρ‹ Π½Π΅ стал ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ эту Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ для синтаксичСского Π°Π½Π°Π»ΠΈΠ·Π° любого ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎΠ³ΠΎ XML, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ сочтСн Π²Ρ€Π°ΠΆΠ΄Π΅Π±Π½Ρ‹ΠΌ ΠΈ Π΄ΠΎΡΡ‚Π°Ρ‚ΡŒ мСня. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ American Fuzzy Lop, всСго Ρ‡Π΅Ρ€Π΅Π· нСсколько ΠΌΠΈΠ½ΡƒΡ‚ я ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ» ΠΎΠΊΠΎΠ»ΠΎ 30 ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… сбоСв.

Но C Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ быстрый, ΠΏΡ€Π°Π²Π΄Π°? Π’ 100 Ρ€Π°Π· быстрСС, Ρ‡Π΅ΠΌ Haskell! Риск стоит Ρ‚ΠΎΠ³ΠΎ.

Но-Π½ΠΎ C быстрый!

Π”Π°Π²Π°ΠΉΡ‚Π΅ посмотрим Π½Π° это. ΠœΡ‹ собираСмся ΠΏΡ€ΠΎΠ°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ XML-Ρ„Π°ΠΉΠ» Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ 4 ΠšΠ‘, 31 ΠšΠ‘ ΠΈ 211 ΠšΠ‘.

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΏΠ°ΠΊΠ΅Ρ‚ тСстирования Criterion, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡΡ€Π°Π²Π½ΠΈΡ‚ΡŒ Hexml с довольно старым ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠΌ Haskell xml …

  Π€Π°ΠΉΠ» ΡˆΠ΅ΡΡ‚Π½Π°Π΄Ρ†Π°Ρ‚Π΅Ρ€ΠΈΡ‡Π½Ρ‹ΠΉ xml
4 ΠšΠ‘ 6,26 мкс 1,94 мс (1940 мкс)
31 ΠšΠ‘ 9,41 мкс 13,6 мс (13600 мкс)
211 ΠšΠ‘ 260 мкс 25,9 мс (25900 мкс)  

Ой! Π­Ρ‚ΠΈ Ρ†ΠΈΡ„Ρ€Ρ‹ Π½Π΅ выглядят Ρ…ΠΎΡ€ΠΎΡˆΠΈΠΌΠΈ. ΠŸΠ°ΠΊΠ΅Ρ‚ xml Π² 100-300 Ρ€Π°Π· ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅.

Π›Π°Π΄Π½ΠΎ, я нСсправСдлив. ΠŸΠ°ΠΊΠ΅Ρ‚ xml Π½Π΅ отличаСтся ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒΡŽ. ОписаниС Π΅Π³ΠΎ ΠΏΠ°ΠΊΠ΅Ρ‚Π° просто ΠŸΡ€ΠΎΡΡ‚Π°Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° XML. Π‘Ρ€Π°Π²Π½ΠΈΠΌ с ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠΌ hexpat. Π’ описании этого Π΅ΡΡ‚ΡŒ:

ЦСлями проСктирования ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ, ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ, ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ, простота интСрфСйса ΠΈ ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½ΠΎΡΡ‚ΡŒ.

Π’Π°ΠΊ Ρ‡Ρ‚ΠΎ это, вСроятно, большС соотвСтствуСт Π»ΡƒΡ‡ΡˆΠΈΠΌ Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π°ΠΌ XML Π½Π° Haskell. Он Ρ‚Π°ΠΊΠΆΠ΅ основан Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ C expat, которая Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ быстрой.

  Π€Π°ΠΉΠ» hexml hexpat
4 ΠšΠ‘ 6.395 мкс 320,3 мкс
31 ΠšΠ‘ 9,474 мкс 378,3 мкс
211 ΠšΠ‘ 256,2 мкс 25,68 мс  

Π­Ρ‚ΠΎ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π»ΡƒΡ‡ΡˆΠ΅. БСйчас ΠΌΡ‹ Π² 40–100 Ρ€Π°Π· ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅, Ρ‡Π΅ΠΌ Hexml. Π― Π±Ρ‹ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Π΅Π» Π² 10 Ρ€Π°Π· ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅, Π½ΠΎ это Π±ΠΎΠ»Π΅Π΅ Ρ€Π°Π·ΡƒΠΌΠ½Ρ‹ΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚. ΠŸΠ°ΠΊΠ΅Ρ‚ hexpat ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚: сохранСниС ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ мСстополоТСнии, Ρ€Π°Π·ΡƒΠΌΠ½Ρ‹Π΅ ошибки синтаксичСского Π°Π½Π°Π»ΠΈΠ·Π°, ΠΏΠΎΠ»Π½Ρ‹ΠΉ стандарт XML. Hexml Π½ΠΈΡ‡Π΅Π³ΠΎ ΠΈΠ· этого Π½Π΅ Π΄Π΅Π»Π°Π΅Ρ‚.

Π”Π°Π²Π°ΠΉΡ‚Π΅ бросим Π½Π°ΠΌ Π²Ρ‹Π·ΠΎΠ². МоТСм Π»ΠΈ ΠΌΡ‹ ΡΠΎΠΏΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΈΠ»ΠΈ ΠΏΡ€Π΅Π²Π·ΠΎΠΉΡ‚ΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚ Hexml Π² простом старом Haskell? Π­Ρ‚ΠΎ Π·ΡƒΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΡ€ΠΎΠ½Π·ΠΈΠ» мою ΠΊΠΎΠΆΡƒ. Π― написал Нилу ΠΏΠΎ элСктронной ΠΏΠΎΡ‡Ρ‚Π΅, ΠΈ ΠΎΠ½ согласился:

Π― Π½Π΅ ΡΡ‡ΠΈΡ‚Π°ΡŽ нСсправСдливым ΠΈΠ»ΠΈ ΠΎΡΠΊΠΎΡ€Π±ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Hexml Π² качСствС основы — я ΠΏΡ€ΠΈΠ²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽ это!

Π― расскаТу, ΠΊΠ°ΠΊ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΊ Π²Π°ΠΌ.Π― Π½Π°Π·Π²Π°Π» свою Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ Xeno (ΠΏΠΎ понятным ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°ΠΌ).

Начни с самого простого

… ΠΈ ΡƒΠ±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ это быстро. Π’ΠΎΡ‚ ΠΏΠ΅Ρ€Π²ΠΎΠ΅, Ρ‡Ρ‚ΠΎ я написал, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ, насколько быстро ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ просмотр Ρ„Π°ΠΉΠ»Π° ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с Hexml.

Числа 60 ΠΈ 62 — это < ΠΈ > . Π’ XML ΠΈΠΌΠ΅ΡŽΡ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ символы < ΠΈ > (Ссли вас Π½Π΅ ΠΈΠ½Ρ‚Π΅Ρ€Π΅ΡΡƒΡŽΡ‚ сущности). < ΠΈ > Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒΡΡ Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ€Π΅Ρ‡Π΅Π²Ρ‹Ρ… Π·Π½Π°ΠΊΠΎΠ² (Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ²).Π­Ρ‚ΠΎ СдинствСнныС Π²Π°ΠΆΠ½Ρ‹Π΅ Π²Π΅Ρ‰ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΈΡΠΊΠ°Ρ‚ΡŒ. Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ²:

  Π€Π°ΠΉΠ» ΡˆΠ΅ΡΡ‚Π½Π°Π΄Ρ†Π°Ρ‚Π΅Ρ€ΠΈΡ‡Π½Ρ‹ΠΉ xeno
4 ΠšΠ‘ 6,395 мкс 2,630 мкс
42 ΠšΠ‘ 37,55 мкс 7,814 мкс  

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, базовая ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π΅ ΠΏΠΎ Ρ„Π°ΠΉΠ»Ρƒ скачками довольно высока! ΠŸΠΎΡ‡Π΅ΠΌΡƒ это быстро? Π”Π°Π²Π°ΠΉΡ‚Π΅ посмотрим Π½Π° это ΠΌΠΈΠ½ΡƒΡ‚ΠΊΡƒ:

  • Π’ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ… ByteString - это бСзопасная ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ° Π²ΠΎΠΊΡ€ΡƒΠ³ Π²Π΅ΠΊΡ‚ΠΎΡ€Π° Π±Π°ΠΉΡ‚ΠΎΠ². Π­Ρ‚ΠΎ эквивалСнтно char * Π² C.
  • ИмСя это Π² Π²ΠΈΠ΄Ρƒ, S.Ѐункция elemIndex Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° с использованиСм стандартной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ C memchr (3) . Как ΠΌΡ‹ всС Π·Π½Π°Π΅ΠΌ, memchr пСрСскакиваСт Ρ‡Π΅Ρ€Π΅Π· ваш Ρ„Π°ΠΉΠ» Π² Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Π³Ρ€Π°Π½ΠΈΡ†Π°Ρ… слов ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ SIMD, Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ чСртовски быстро. Но сама функция elemIndex бСзопасна.

Π˜Ρ‚Π°ΠΊ, ΠΌΡ‹ фактичСски выполняСм Ρ†ΠΈΠΊΠ» for (..) {s = memchr (s, ..)} Π½Π°Π΄ Ρ„Π°ΠΉΠ»ΠΎΠΌ.

Π‘Π»Π΅Π΄ΠΈΡ‚Π΅ Π·Π° распрСдСлСниСм

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΏΠ°ΠΊΠ΅Ρ‚ взвСшивания для отслСТивания распрСдСлСния памяти, ΠΌΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΠΌ прямо сСйчас ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π½Π° распрСдСлСниС нашСго ΠΊΠΎΠ΄Π°:

  ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° GC Π±Π°ΠΉΡ‚ΠΎΠ² Case Bytes
Π Π°Π·Π±ΠΎΡ€ 4 ΠšΠ‘ 1,168 0 ОК
Π Π°Π·Π±ΠΎΡ€ 42kb 1,560 0 OK
Π Π°Π·Π±ΠΎΡ€ 52kb 1,168 0 OK
182kb синтаксичСский Π°Π½Π°Π»ΠΈΠ· 1,168 0 ОК  

ΠœΡ‹ Π²ΠΈΠ΄ΠΈΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ½Π° постоянная.Π₯ΠΎΡ€ΠΎΡˆΠΎ, ΠΎΠ½ мСняСтся Π½Π° нСсколько Π±Π°ΠΉΡ‚ΠΎΠ², Π½ΠΎ Π½Π΅ увСличиваСтся Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎ ΠΈΠ»ΠΈ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π² этом Ρ€ΠΎΠ΄Π΅. Π­Ρ‚ΠΎ Ρ…ΠΎΡ€ΠΎΡˆΠΎ! Одна Π²Π΅Ρ‰ΡŒ, которая Π±Ρ€ΠΎΡΠΈΠ»Π°ΡΡŒ ΠΌΠ½Π΅ Π² Π³Π»Π°Π·Π°, это Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π½Π΅ Π·Π°ΠΏΠ»Π°Ρ‚ΠΈΠ»ΠΈ Π·Π° распрСдСлСниС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠœΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ, . Для символов 1000x < ΠΈ > Ρƒ нас Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ 1000 Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠΉ ΠΈΠ· ВсСго / НичСго . Π”Π°Π²Π°ΠΉ Π½Π° сСкунду спустимся Π² ΠΊΡ€ΠΎΠ»ΠΈΡ‡ΡŒΡŽ Π½ΠΎΡ€Ρƒ.

Взгляд Π½Π° ядро ​​

Ну, Ссли ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ исходники Π²ΠΎΡ‚ Ρ‚Π°ΠΊ

  стСк ghc - -O2 -ddump-simple Xeno.HS  

Π’Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ Π΄Π°ΠΌΠΏ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° ядра, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ создаСтся послС обСссахаривания ΠΊΠΎΠ΄Π° Haskell ΠΈ Π΄ΠΎ Π΅Π³ΠΎ компиляции Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. На этом этапС Π²Ρ‹ ΡƒΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡŽ, ΠΎΡΠ½ΠΎΠ²Π°Π½Π½ΡƒΡŽ Π½Π° встраивании, ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠΈ ΠΎΠ±Ρ‰ΠΈΡ… ΠΏΠΎΠ΄Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ, обСзлСсСнии ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… Π²Π΅Ρ‰Π°Ρ….

Π’Ρ‹Ρ…ΠΎΠ΄ довольно большой. Π―Π΄Ρ€ΠΎ многословно, Π° быстрый ΠΊΠΎΠ΄ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π΄Π»ΠΈΠ½Π½Π΅Π΅. Π’ΠΎΡ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚, Π½ΠΎ Π²Π°ΠΌ Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π΅Π³ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ. ΠŸΡ€ΠΎΡΡ‚ΠΎ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΌ Π½Π΅Ρ‚ упоминания ΠΎ Β«ΠœΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ, просто ΠΈΠ»ΠΈ Π½ΠΈΡ‡Π΅Π³ΠΎΒ».Он Π²ΠΎΠΎΠ±Ρ‰Π΅ это пропускаСт. Π‘ΠΌΠΎΡ‚Ρ€ΠΈΡ‚Π΅ здСсь ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎ. ВыполняСтся Π²Ρ‹Π·ΠΎΠ² memchr , Π·Π°Ρ‚Π΅ΠΌ выполняСтся сравнСниС eqAddr с NULL , Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ·Π½Π°Ρ‚ΡŒ, выполняСтся Π»ΠΈ memchr ΠΈΠ»ΠΈ Π½Π΅Ρ‚. Но ΠΌΡ‹ всС Π΅Ρ‰Π΅ ΠΏΡ€ΠΎΠ²ΠΎΠ΄ΠΈΠΌ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ бСзопасности, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ Π±Ρ‹Π» бСзопасным.

ВстраиваниС счСтчиков

Π›ΡŽΠ±ΠΎΠΏΡ‹Ρ‚Π½Ρ‹ΠΉ Ρ‡ΠΈΡ‚Π°Ρ‚Π΅Π»ΡŒ ΠΌΠΎΠ³ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π² ΠΌΠΎΠ΅ΠΌ ΠΏΠ΅Ρ€Π²ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΊΠΎΠ΄Π° строка INLINE .

Π‘Π΅Π· INLINE вся функция Π² Π΄Π²Π° Ρ€Π°Π·Π° ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅ ΠΈ ΠΈΠΌΠ΅Π΅Ρ‚ Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠ΅ распрСдСлСниС.

  ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° GC Π±Π°ΠΉΡ‚ΠΎΠ² Case Bytes
Π Π°Π·Π±ΠΎΡ€ 4kb 1,472 0 OK
Π Π°Π·Π±ΠΎΡ€ 42 ΠšΠ‘ 1,160 0 ОК
Π Π°Π·Π±ΠΎΡ€ 52 ΠšΠ‘ 1,160 0 ОК

Π±Π΅Π½Ρ‡ΠΌΠ°Ρ€ΠΊΠΈΠ½Π³ 4KB / xeno
врСмя 2,512 мкс (2,477 мкс .. 2,545 мкс)
Π±Π΅Π½Ρ‡ΠΌΠ°Ρ€ΠΊΠΈΠ½Π³ 211KB / xeno
врСмя 129,9 мкс (128,7 мкс .. 131,2 мкс)
Π±Π΅Π½Ρ‡ΠΌΠ°Ρ€ΠΊΠΈΠ½Π³ 31KB / xeno
врСмя 1,930 мкс (1,909 мкс .. 1,958 мкс)  

ΠΏΡ€ΠΎΡ‚ΠΈΠ²:

  ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° GC Π±Π°ΠΉΡ‚ΠΎΠ² Case Bytes
Π Π°Π·Π±ΠΎΡ€ 4kb 12,416 0 OK
42kb синтаксичСский Π°Π½Π°Π»ΠΈΠ· 30,080 0 OK
52kb Ρ€Π°Π·Π±ΠΎΡ€ 46,208 0 OK

Π±Π΅Π½Ρ‡ΠΌΠ°Ρ€ΠΊΠΈΠ½Π³ 4KB / xeno
врСмя 5.258 мкс (5,249 мкс .. 5,266 мкс)
Π±Π΅Π½Ρ‡ΠΌΠ°Ρ€ΠΊΠΈΠ½Π³ 211KB / xeno
врСмя 265,9 мкс (262,4 мкс .. 271,4 мкс)
Π±Π΅Π½Ρ‡ΠΌΠ°Ρ€ΠΊΠΈΠ½Π³ 31KB / xeno
врСмя 3,212 мкс (3,209 мкс .. 3,218 мкс)  

ВсСгда ΠΎΠ±Ρ€Π°Ρ‰Π°ΠΉΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Ρ‚Π°ΠΊΠΈΠ΅ Π²Π΅Ρ‰ΠΈ. Π’Ρ‹ Π½Π΅ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ INLINE Π½Π° всС. Иногда это добавляСт замСдлСния, Π² Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ случаСв это Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ значСния. Π’Π°ΠΊ Ρ‡Ρ‚ΠΎ ΡΠ²Π΅Ρ€ΡŒΡ‚Π΅ΡΡŒ с вашим Π½Π°Π±ΠΎΡ€ΠΎΠΌ тСстов.

Раскрутка ΠΏΠ΅Ρ‚Π»ΠΈ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ

НСкоторыС Π²Π΅Ρ‰ΠΈ Π½ΡƒΠΆΠ½ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ. Π― Π΄ΠΎΠ±Π°Π²ΠΈΠ» Π² Π½Π°ΡˆΡƒ ΠΌΠ°Π»Π΅Π½ΡŒΠΊΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ синтаксичСский Π°Π½Π°Π»ΠΈΠ· ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠ΅Π²:

И стало Π² 2 Ρ€Π°Π·Π° ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅:

  тСстированиС 4KB / xeno
врСмя 2.512 мкс (2,477 мкс .. 2,545 мкс)  

Π‘

ΠΏΠΎ

  тСстированиС 4KB / xeno
врСмя 4,296 мкс (4,240 ... 4,348 мкс)  

Π˜Ρ‚Π°ΠΊ, я ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ» S.isPrefixOf , Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ Π±Ρ‹Π» Ρ€Π°Π·Π²Π΅Ρ€Π½ΡƒΡ‚, Π½Π° Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² S.index , Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

И ΠΎΠ½ снова ΡƒΠΏΠ°Π» Π΄ΠΎ нашСй Π±Π°Π·ΠΎΠ²ΠΎΠΉ скорости.

Поиск ΠΈΠΌΠ΅Π½ Ρ‚Π΅Π³ΠΎΠ²

Π― Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π» поиск ΠΈΠΌΠ΅Π½ Ρ‚Π΅Π³ΠΎΠ² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

И сразу Π·Π°ΠΌΠ΅Ρ‚ΠΈΠ» большоС ΠΏΠΎΠ΄Ρ‚ΠΎΡ€ΠΌΠ°ΠΆΠΈΠ²Π°Π½ΠΈΠ΅. Π‘

  ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° GC Π±Π°ΠΉΡ‚ΠΎΠ² Case Bytes
Π Π°Π·Π±ΠΎΡ€ 4 ΠšΠ‘ 1,160 0 ОК
42kb синтаксичСский Π°Π½Π°Π»ΠΈΠ· 1,472 0 OK
Π Π°Π·Π±ΠΎΡ€ 52 ΠšΠ‘ 1,160 0 ОК
ВСст xeno-memory-bench: ЀИНИШ
ВСст ксСно-скорости: Π‘Π•Π“...
Π±Π΅Π½Ρ‡ΠΌΠ°Ρ€ΠΊΠΈΠ½Π³ 4KB / hexml
врСмя 6,149 мкс (6,125 мкс .. 6,183 мкс)
Π±Π΅Π½Ρ‡ΠΌΠ°Ρ€ΠΊΠΈΠ½Π³ 4KB / xeno
врСмя 2,691 мкс (2,665 мкс .. 2,712 мкс)  

Π‘

ΠΏΠΎ

  ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° GC Π±Π°ΠΉΡ‚ΠΎΠ² Case Bytes
Π Π°Π·Π±ΠΎΡ€ 4kb 26096 0 OK
42kb Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒ 65,696 0 OK
Π Π°Π·Π±ΠΎΡ€ 52 ΠšΠ‘ 102,128 0 ОК
ВСст xeno-memory-bench: ЀИНИШ
ВСст ксСно-скорости: Π‘Π•Π“ ...
Π±Π΅Π½Ρ‡ΠΌΠ°Ρ€ΠΊΠΈΠ½Π³ 4KB / hexml
врСмя 6,225 мкс (6,178 мкс .. 6,269 мкс)
Π±Π΅Π½Ρ‡ΠΌΠ°Ρ€ΠΊΠΈΠ½Π³ 4KB / xeno
врСмя 10.34 мкс (10,06 мкс .. 10,59 мкс)  

ΠŸΠ΅Ρ€Π²ΠΎΠ΅, Ρ‡Ρ‚ΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ€ΠΎΡΠΈΡ‚ΡŒΡΡ Π² Π³Π»Π°Π·Π°, - это распрСдСлСния. Π§Ρ‚ΠΎ Ρ‚Π°ΠΌ происходит? Π― просмотрСл Π²Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊΠ°, запустив stack bench --profile , Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ Π²Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ профиля.

  Π‘Ρ€, 11 января, 17:41 2017 ΠžΡ‚Ρ‡Π΅Ρ‚ ΠΎ ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΈ распрСдСлСния (ΠΎΠΊΠΎΠ½Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ)

xeno-speed-bench + RTS -N -p -RTS 4KB / xeno

ΠΎΠ±Ρ‰Π΅Π΅ врСмя = 8,09 сСк (8085 Ρ‚ΠΈΠΊΠΎΠ² @ 1000 мкс, 1 процСссор)
ΠΎΠ±Ρ‰Π΅Π΅ Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ = 6075628752 Π±Π°ΠΉΡ‚Π° (Π±Π΅Π· ΡƒΡ‡Π΅Ρ‚Π° Π½Π°ΠΊΠ»Π°Π΄Π½Ρ‹Ρ… расходов Π½Π° ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅)

ΠœΠžΠ”Π£Π›Π¬ БВОИМОБВИ ЦЕНВРА% Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ% распрСдСлСния

Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒ.findTagName Xeno 35,8 72,7
getOverhead Criterion.Monad 13.6 0.0
parse.checkOpenComment Xeno 9.9 0.0
parse.findLT Xeno 8.9 0.0
Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒ Xeno 8.4 0.0
>> = Data.Vector.Fusion.Util 4.6 7.7
getGCStats Criterion.Measurement 2.8 0.0
basicUnsafeIndexM Π”Π°Π½Π½Ρ‹Π΅.Π’Π΅ΠΊΡ‚ΠΎΡ€.ΠŸΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ² 1.6 2.0
fmap Data.Vector.Fusion.Stream.Monadic 1.3 2.2
rSquare.p Бтатистика. РСгрСссия 1,3 1,5
basicUnsafeWrite Data.Vector.Primitive.Mutable 1.2 1.4
innerProduct. \ Statistics.Matrix.Algorithms 1.0 1.6
qr. \. \ Statistics.Matrix.Algorithms 0.8 1.2
basicUnsafeSlice Data.Vector.Primitive.Mutable 0.5 1.1
Ρ‚Ρ€Π°Π½ΡΠΏΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ статистику.ΠœΠ°Ρ‚Ρ€ΠΈΡ†Π° 0,5 1,3  

Π‘ΠΏΡ€Π°Π²Π° Π²Π²Π΅Ρ€Ρ…Ρƒ Ρƒ нас Π΅ΡΡ‚ΡŒ findTagName , Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰ΠΈΠΉ всС распрСдСлСния. Π˜Ρ‚Π°ΠΊ, я просмотрСл ΠΊΠΎΠ΄ ΠΈ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ», Ρ‡Ρ‚ΠΎ СдинствСнноС, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ, - это S.drop . Π­Ρ‚Π° функция пропускаСт n элСмСнтов Π² Π½Π°Ρ‡Π°Π»Π΅ строки Π±Π°ΠΉΡ‚Π° . ΠžΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ΡΡ, S.head (S.drop index0 str) выдСлял ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½ΡƒΡŽ строку Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ символ этой строки. Он Π½Π΅ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π» всю строку, Π° создавал Π½ΠΎΠ²Ρ‹ΠΉ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Π½Π΅Π΅.

Π˜Ρ‚Π°ΠΊ, я понял, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠ³Ρƒ просто Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ S.head (S.drop n s) Π½Π° S.index s n :

И Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ, выдСлСния исчСзли:

  ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° GC Π±Π°ΠΉΡ‚ΠΎΠ² Case Bytes
Π Π°Π·Π±ΠΎΡ€ 4 ΠšΠ‘ 1,160 0 ОК
Π Π°Π·Π±ΠΎΡ€ 42 ΠšΠ‘ 1,160 0 ОК
Π Π°Π·Π±ΠΎΡ€ 52kb 1,472 0 OK
ВСст xeno-memory-bench: ЀИНИШ
ВСст ксСно-скорости: Π‘Π•Π“ ...
Π±Π΅Π½Ρ‡ΠΌΠ°Ρ€ΠΊΠΈΠ½Π³ 4KB / hexml
врСмя 6,190 мкс (6,159 мкс .. 6,230 мкс)
Π±Π΅Π½Ρ‡ΠΌΠ°Ρ€ΠΊΠΈΠ½Π³ 4KB / xeno
врСмя 4.215 мкс (4,175 мкс .. 4,247 мкс)  

Π”ΠΎ 4,215 мкс. Π­Ρ‚ΠΎ Π½Π΅ Ρ‚Π°ΠΊ быстро, ΠΊΠ°ΠΊ наш ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Π°Π½Π°Π»ΠΈΠ· ΠΈΠΌΠ΅Π½ΠΈ 2,691 мкс. Но Π½Π°ΠΌ ΠΏΡ€ΠΈΡˆΠ»ΠΎΡΡŒ Π·Π°ΠΏΠ»Π°Ρ‚ΠΈΡ‚ΡŒ ΠΈΠ»ΠΈ Π·Π° Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ с Ρ‚Π΅Π³ΠΎΠΌ. ΠœΡ‹ просто большС Π½Π΅ выдСляСм, ΠΈ это Π·Π΄ΠΎΡ€ΠΎΠ²ΠΎ.

SAX бСсплатно

Π’ ΠΊΠΎΠ½Ρ†Π΅ ΠΊΠΎΠ½Ρ†ΠΎΠ² я ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ» Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ process , которая Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ XML ΠΈ запускаСт события Π² стилС SAX:

Π•Ρ‰Π΅ Ρ€Π°Π· спасибо Π·Π° ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡŽ GHC, простой Π²Ρ‹Π·ΠΎΠ² этой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ бСздСйствиС Π² точности совпадаСт с Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ Π΄ΠΎ SAX-ization:

  ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° GC Π±Π°ΠΉΡ‚ΠΎΠ² Case Bytes
Π Π°Π·Π±ΠΎΡ€ 4kb 1,472 0 OK
Π Π°Π·Π±ΠΎΡ€ 42 ΠšΠ‘ 1,160 0 ОК
Π Π°Π·Π±ΠΎΡ€ 52kb 1,472 0 OK

Π±Π΅Π½Ρ‡ΠΌΠ°Ρ€ΠΊΠΈΠ½Π³ 4KB / xeno
врСмя 4.320 мкс (4,282 мкс .. 4,361 мкс)  

Π­Ρ‚Π° функция Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ с Ρ‚ΠΎΠΉ ΠΆΠ΅ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒΡŽ, Ρ‡Ρ‚ΠΎ ΠΈ процСсс Π΄ΠΎ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΎΠ½ принял ΠΊΠ°ΠΊΠΈΠ΅-Π»ΠΈΠ±ΠΎ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π°. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ СдинствСнными Π½Π°ΠΊΠ»Π°Π΄Π½Ρ‹ΠΌΠΈ расходами для SAX'Π° Π±ΡƒΠ΄ΡƒΡ‚ дСйствия, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ сами Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π°.

БпСциализация - ΠΏΠΎ насСкомым (ΠΈ, ΠΊΠ°ΠΊ Π±Ρ‹Π²Π°Π΅Ρ‚, ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°ΠΌ)

Π˜Π½Ρ‚Π΅Ρ€Π΅ΡΠ½ΠΎ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΡ€Π°Π³ΠΌΡ‹ SPECIALIZE для Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ process ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Π½Π° 1 мкс.БпСциализация ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ для Π΄Π°Π½Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, которая являСтся ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½ΠΎΠΉ (ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„Π½ΠΎΠΉ Ρ‚ΠΈΠΏ-класс), Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΎΠ½Π° Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ словаря Π²ΠΎ врСмя выполнСния для ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ экзСмпляра, вмСсто этого ΠΌΡ‹ сгСнСрируСм ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ ΠΊΠΎΠ΄Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ спСциализируСтся Π½Π° этом ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΌ экзСмплярС. НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ спСциализированный Ρ‚ΠΈΠΏ ΠΌΠΎΠ½Π°Π΄Ρ‹ Identity (Ρ‚.Π΅. просто чистый, Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Π΄Π΅Π»Π°Π΅Ρ‚) для процСсса .

ΠŸΠ΅Ρ€Π΅Π΄

  тСстированиС 4KB / xeno-sax
врСмя 5,877 мкс (5,837 мкс.. 5,926 мкс)
Π±Π΅Π½Ρ‡ΠΌΠ°Ρ€ΠΊΠΈΠ½Π³ 211KB / xeno-sax
врСмя 285,8 мкс (284,7 мкс .. 287,4 мкс)  

послС

  тСстированиС 4KB / xeno-sax
врСмя 5,046 мкс (5,036 мкс .. 5,056 мкс)
Π±Π΅Π½Ρ‡ΠΌΠ°Ρ€ΠΊΠΈΠ½Π³ 211KB / xeno-sax
врСмя 240,6 мкс (240,0 мкс .. 241,5 мкс)  

Π’ случаС 4KB это всСго лишь 800 нс, Π½ΠΎ, ΠΊΠ°ΠΊ ΠΌΡ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ Π² Π‘Ρ€ΠΈΡ‚Π°Π½ΠΈΠΈ, ΠΏΠΎΠ·Π°Π±ΠΎΡ‚ΡŒΡ‚Π΅ΡΡŒ ΠΎ ΠΏΠ΅Π½Π½ΠΈ, ΠΈ Ρ„ΡƒΠ½Ρ‚Ρ‹ сами позаботятся ΠΎ сСбС. Π Π°Π·Π½ΠΈΡ†Π° 240-> 285 Π½Π΅Π²Π΅Π»ΠΈΠΊΠ° с практичСской Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния, Π½ΠΎ ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ ΠΈΠ³Ρ€Π°Π΅ΠΌ Π² ΠΈΠ³Ρ€Ρƒ Π½Π° ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ, ΠΌΡ‹ ΠΎΠ±Ρ€Π°Ρ‰Π°Π΅ΠΌ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Π΅ Π²Π΅Ρ‰ΠΈ.

Π“Π΄Π΅ ΠΌΡ‹ находимся: Xeno vs Hexml

Π’ настоящСС врСмя интСрфСйс SAX Π² Zeno прСвосходит Hexml Π² пространствС ΠΈ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ. Π£Ρ€Π°! ΠœΡ‹ Ρ‚Π°ΠΊ ΠΆΠ΅ быстры, ΠΊΠ°ΠΊ C!

  Π€Π°ΠΉΠ» hexml-dom xeno-sax
4 ΠšΠ‘ 6,134 мкс 5,147 мкс
31 ΠšΠ‘ 9,299 мкс 2,879 мкс
211 ΠšΠ±Π°ΠΉΡ‚ 257,3 мкс 241,0 мкс  

Π’Π°ΠΊΠΆΠ΅ стоит ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Haskell Π΄Π΅Π»Π°Π΅Ρ‚ всС это бСзопасно. ВсС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ я ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽ, ΡΠ²Π»ΡΡŽΡ‚ΡΡ стандартными функциями ByteString, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡŽΡ‚ Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ ΠΈ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΡŽΡ‚ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅, Ссли это Ρ‚Π°ΠΊ. ΠœΡ‹ Π½Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ случайно доступ ΠΊ памяти, Ρ‡Π΅Π³ΠΎ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π΄Π΅Π»Π°Ρ‚ΡŒ, ΠΈ Π½Π΅ допускаСм ошибок.Π‘Π΅Ρ€Π²Π΅Ρ€ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ.

Если интСрСсно, Ссли ΠΌΡ‹ ΠΏΠ΅Ρ€Π΅ΠΉΠ΄Π΅ΠΌ Π½Π° нСбСзопасныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ( unsafeTake , unsafeIndex ΠΈΠ· модуля Data.ByteString.Unsafe ), ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ Π·Π°ΠΌΠ΅Ρ‚Π½ΠΎΠ΅ ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ скорости:

  Π€Π°ΠΉΠ» hexml-dom xeno-sax
4 ΠšΠ‘ 6,134 мкс 4,344 мкс
31 ΠšΠ‘ 9,299 мкс 2,570 мкс
211 ΠšΠ±Π°ΠΉΡ‚ 257,3 мкс 206,9 мкс  

Но Π½Π°ΠΌ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠ΅Π½Π΄Ρ€ΠΈΠ²Π°Ρ‚ΡŒΡΡ. ΠœΡ‹ ΡƒΠΆΠ΅ ΠΈΠ·Π»ΠΎΠΆΠΈΠ»ΠΈ свою Ρ‚ΠΎΡ‡ΠΊΡƒ зрСния. ΠœΡ‹ хаскСллСры, ΠΌΡ‹ любим Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ. Π― ΡΠΎΡ…Ρ€Π°Π½ΡŽ свои бСзопасныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

Но Hexml Π΄Π΅Π»Π°Π΅Ρ‚ большС!

Π‘Ρ‹Π»ΠΎ Π±Ρ‹ ΡƒΠΏΡƒΡ‰Π΅Π½ΠΈΠ΅ΠΌ, Ссли Π±Ρ‹ я Π½Π΅ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΠ» Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Ρ‚ΠΎΡ‚ Ρ„Π°ΠΊΡ‚, Ρ‡Ρ‚ΠΎ Hexml Π΄Π΅Π»Π°Π΅Ρ‚ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Π΅ Π²Π΅Ρ‰ΠΈ, Ρ‡Π΅ΠΌ ΠΌΡ‹ сдСлали здСсь. Hexml выдСляСт DOM для ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎΠ³ΠΎ доступа. ΠΎ Π½Π΅Ρ‚! РаспрСдСлСниС: Ρ…ΡƒΠ΄ΡˆΠΈΠΉ Π²Ρ€Π°Π³ Π₯аскСлла!

ΠœΡ‹ Π²ΠΈΠ΄Π΅Π»ΠΈ, Ρ‡Ρ‚ΠΎ Haskell ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ выдСляСт ΠΌΠ½ΠΎΠ³ΠΎ. БобствСнно, ΠΊΠ°ΠΊ слСдуСт Π½Π° это посмотрСли?

  ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° GC Π±Π°ΠΉΡ‚ΠΎΠ² Case Bytes
4kb / hexpat-sax 444,176 0 ОК
31kb / hexpat-sax 492,576 0 ОК
211kb / hexpat-sax 21,112,392 40 OK
4kb / hexpat-dom 519,128 0 ОК
31kb / hexpat-dom 575,232 0 ОК
211ΠΊΠ± / гСкспат-Π΄ΠΎΠΌ 23,182,560 44 ОК  

Π₯ΠΎΡ€ΠΎΡˆΠΎ.

РСализация парсСра DOM для Xeno

Π•Ρ‰Π΅ Π½Π΅ всС потСряно. Hexml - это Π½Π΅ простой синтаксичСский Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ быстро, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ написан Π½Π° языкС C, это Π΅Ρ‰Π΅ ΠΈ достойный Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ. ВмСсто Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹Π΄Π΅Π»ΡΡ‚ΡŒ Π΄Π΅Ρ€Π΅Π²ΠΎ, ΠΎΠ½ выдСляСт большой плоский Π²Π΅ΠΊΡ‚ΠΎΡ€ ΡƒΠ·Π»ΠΎΠ² ΠΈ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ содСрТат смСщСния Π² исходной строкС. ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ это ΠΈ Π² Haskell!

Π’ΠΎΡ‚ ΠΌΠΎΠΉ Π΄ΠΈΠ·Π°ΠΉΠ½ структуры Π΄Π°Π½Π½Ρ‹Ρ…, содСрТащСйся Π² Π²Π΅ΠΊΡ‚ΠΎΡ€Π΅. ΠœΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π² Π²Π΅ΠΊΡ‚ΠΎΡ€Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ†Π΅Π»Ρ‹Π΅ числа. Π¦Π΅Π»Ρ‹Π΅ числа, ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠ΅ Π½Π° смСщСния Π² исходной строкС.Π’ΠΎΡ‚ Ρ‡Ρ‚ΠΎ я ΠΏΡ€ΠΈΠ΄ΡƒΠΌΠ°Π».

Π£ нас Π΅ΡΡ‚ΡŒ Ρ‚Ρ€ΠΈ Π²ΠΈΠ΄Π° ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ. Π­Π»Π΅ΠΌΠ΅Π½Ρ‚Ρ‹, тСкст ΠΈ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹:

Π­Ρ‚ΠΎ всС подробности, ΠΎ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… я ΡΠΎΠ±ΠΈΡ€Π°ΡŽΡΡŒ Ρ€Π°ΡΡΠΊΠ°Π·Π°Ρ‚ΡŒ. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΊΠΎΠ΄, Ссли Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΡƒΠ·Π½Π°Ρ‚ΡŒ большС. Π­Ρ‚ΠΎ Π½Π΅ ΠΎΡ‡Π΅Π½ΡŒ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚. Когда Ρƒ нас Π΅ΡΡ‚ΡŒ Ρ‚Π°ΠΊΠΎΠΉ Π²Π΅ΠΊΡ‚ΠΎΡ€, ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΏΠΎΠ²Π΅Ρ€Ρ… Π½Π΅Π³ΠΎ DOM API, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ Π²Π°ΠΌ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Ρ‚ΡŒΡΡ ΠΏΠΎ Π΄Π΅Ρ€Π΅Π²Ρƒ ΠΊΠ°ΠΊ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΡƒΠ²ΠΈΠ΄ΠΈΠΌ ΠΏΠΎΠ·ΠΆΠ΅.

ΠœΡ‹ собираСмся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ наш синтаксичСский Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ SAX - Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ процСсса , ΠΈ ΠΌΡ‹ собираСмся Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, которая записываСт Π² большой массив.Π­Ρ‚ΠΎ ΠΎΡ‡Π΅Π½ΡŒ Π²Π°ΠΆΠ½Ρ‹ΠΉ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ. Π₯аскСллСрам Π½Π΅ нравятся ΠΈΠΌΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½Ρ‹Π΅ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹, Π½ΠΎ Π₯аскСллу с Π½ΠΈΠΌΠΈ Ρ…ΠΎΡ€ΠΎΡˆΠΎ.

Ѐункция выглядит ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Ρ‚Π°ΠΊ:

Ѐункция Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π² ΠΌΠΎΠ½Π°Π΄Π΅ ST , которая позволяСт Π½Π°ΠΌ локально Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΈ Π·Π°ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ измСняСмыС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΈ Π²Π΅ΠΊΡ‚ΠΎΡ€Ρ‹, ΠΎΡΡ‚Π°Π²Π°ΡΡΡŒ ΠΏΡ€ΠΈ этом чистыми снаруТи.

Π― Π²Ρ‹Π΄Π΅Π»ΡΡŽ массив ΠΈΠ· 1000 64-Π±ΠΈΡ‚Π½Ρ‹Ρ… Ints (Π½Π° 64-Π±ΠΈΡ‚Π½ΠΎΠΉ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π΅), я ΡΠΎΡ…Ρ€Π°Π½ΡΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° ΠΈ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ родитСля (Ссли Π΅ΡΡ‚ΡŒ). ВСкущая Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠ°Ρ пСрСмСнная позволяСт Π½Π°ΠΌ, ΡƒΠ²ΠΈΠ΄Π΅Π² Ρ‚Π΅Π³, Π½Π°Π·Π½Π°Ρ‡ΠΈΡ‚ΡŒ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ Π² Π²Π΅ΠΊΡ‚ΠΎΡ€Π΅, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ элСмСнт Π·Π°ΠΊΡ€Ρ‹Ρ‚.

ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ событиС, Π° массив слишком ΠΌΠ°Π», я ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°ΡŽ массив, удваивая Π΅Π³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€. Π­Ρ‚Π° стратСгия скопирована ΠΈΠ· ΠΏΠ°ΠΊΠ΅Ρ‚Π° Hexml.

НаконСц, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ Π·Π°ΠΊΠΎΠ½Ρ‡ΠΈΠ»ΠΈ, ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ измСняСмый Π²Π΅ΠΊΡ‚ΠΎΡ€, Β«Π·Π°ΠΌΠΎΡ€Π°ΠΆΠΈΠ²Π°Π΅ΠΌΒ» Π΅Π³ΠΎ (это ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ созданиС Π΅Π³ΠΎ нСизмСняСмой вСрсии), Π° Π·Π°Ρ‚Π΅ΠΌ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌ эту копию. ΠœΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ unsafeFreeze для ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ³ΠΎ использования массива Π±Π΅Π· копирования, Ρ‡Ρ‚ΠΎ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π² сСбя ΠΎΠ±Π΅Ρ‰Π°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π½Π΅ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ измСняСмый Π²Π΅ΠΊΡ‚ΠΎΡ€ впослСдствии, Ρ‡Π΅Π³ΠΎ ΠΌΡ‹ Π½Π΅ Π΄Π΅Π»Π°Π΅ΠΌ.

Π‘ΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ DOM

Π”Π°Π²Π°ΠΉΡ‚Π΅ посмотрим Π½Π° скорости:

  Π€Π°ΠΉΠ» hexml-dom xeno-sax xeno-dom
4 ΠšΠ‘ 6.123 мкс 5,038 мкс 10,35 мкс
31 ΠšΠ‘ 9,417 мкс 2,875 мкс 5,714 мкс
211 ΠšΠ‘ 256,3 мкс 240,4 мкс 514,2 мкс  

НСплохо! ΠŸΠ°Ρ€ΡΠ΅Ρ€ DOM лишь <2x ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅, Ρ‡Π΅ΠΌ Hexml (Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ 31 ΠšΠ‘, Π³Π΄Π΅ ΠΎΠ½ быстрСС. shrug ). Π—Π΄Π΅ΡΡŒ я ΠΏΡ€Π΅ΠΊΡ€Π°Ρ‚ΠΈΠ» ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΈ Ρ€Π΅ΡˆΠΈΠ», Ρ‡Ρ‚ΠΎ это достаточно Ρ…ΠΎΡ€ΠΎΡˆΠΎ. Но ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠ΅Ρ€Π΅ΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ, принятыС ΠΏΠΎ Ρ…ΠΎΠ΄Ρƒ Π΄Π΅Π»Π°.

Π’ ΠΊΠΎΠ΄Π΅ ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Π½Π΅ΡƒΠΏΠ°ΠΊΠΎΠ²Π°Π½Π½Ρ‹Π΅ измСняСмыС ссылки для Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° ΠΈ родитСля, измСняСмыС ссылки ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ΡΡ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠΌ измСняСмых ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ².Π‘ΠΌΠΎΡ‚Ρ€ΠΈΡ‚Π΅ эти Π΄Π²Π΅ строки здСсь:

Π˜Π·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ я ΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Π» STRef , ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡƒΠΏΠ°ΠΊΠΎΠ²Π°Π½Ρ‹ Π² ΠΊΠΎΡ€ΠΎΠ±ΠΊΡƒ. Π’ Ρ€Π°ΠΌΠΊΠ΅ просто ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ это ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Ρ†Π΅Π»ΠΎΠ΅ число, Π° Π½Π΅ Π½Π° фактичСскоС Ρ†Π΅Π»ΠΎΠ΅ число. Распакованный Int - это ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ рСгистр. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ STRef , ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ Ρ…ΡƒΠ΄ΡˆΠΈΠ΅ скорости:

  Π€Π°ΠΉΠ» xeno-dom
4 ΠšΠ‘ 12,18 мкс
31 ΠšΠ‘ 6,412 мкс
211 ΠšΠ‘ 631,1 мкс  

Π§Ρ‚ΠΎ являСтся Π·Π°ΠΌΠ΅Ρ‚Π½ΠΎΠΉ ΠΏΠΎΡ‚Π΅Ρ€Π΅ΠΉ скорости.

Π•Ρ‰Π΅ ΠΎΠ΄Π½Π° Π²Π΅Ρ‰ΡŒ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ слСдуСт ΠΏΡ€ΠΈΠ½ΡΡ‚ΡŒ Π²ΠΎ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, - это Ρ‚ΠΈΠΏ массива. Π― ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽ распакованныС измСняСмыС Π²Π΅ΠΊΡ‚ΠΎΡ€Ρ‹ ΠΈΠ· ΠΏΠ°ΠΊΠ΅Ρ‚Π° vector .ΠŸΡ€ΠΈ использовании Π°Ρ‚ΠΎΠΌΠ°Ρ€Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ², Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ Int, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ распакованныС Π²Π΅ΠΊΡ‚ΠΎΡ€Ρ‹. Если я ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ ΡƒΠΏΠ°ΠΊΠΎΠ²Π°Π½Π½Ρ‹Π΅ Π²Π΅ΠΊΡ‚ΠΎΡ€Ρ‹ ΠΈΠ· Data.Vector , ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ снизится Π΄ΠΎ:

  Π€Π°ΠΉΠ» xeno-dom
4 ΠšΠ‘ 11,95 мкс (ΠΎΡ‚ 10,35 мкс)
31 ΠšΠ‘ 6,430 мкс (ΠΎΡ‚ 5,714 мкс)
211 ΠšΠ‘ 1,402 мс (ΠΎΡ‚ 514,2 мкс)  

Помимо Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ для записи трСбуСтся Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ большС Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, ΠΎΠ½ Ρ‚Π°ΠΊΠΆΠ΅ выдСляСт Π² 1,5 Ρ€Π°Π·Π° большС ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Π°:

  ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° GC Π±Π°ΠΉΡ‚ΠΎΠ² Case Bytes
4kb / xeno / dom 11240 0 ОК
31kb / xeno / dom 10,232 0 ОК
211kb / xeno / dom 1,082,696 0 ОК  

становится

  ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° GC Π±Π°ΠΉΡ‚ΠΎΠ² Case Bytes
4kb / xeno / dom 22,816 0 ОК
31kb / xeno / dom 14,968 0 ОК
211kb / xeno / dom 1,638,392 1 ОК  

Π’ΠΈΠ΄ΠΈΡ‚Π΅ Ρ‚Π°ΠΌ GC? Нам это Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ.

НаконСц, Π΅Ρ‰Π΅ ΠΎΠ΄Π½ΠΎ Π·Π°ΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅ для парсСра DOM. Если ΠΌΡ‹ откаТСмся ΠΎΡ‚ бСзопасности ΠΈ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡΡ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ unsafeWrite ΠΈ unsafeRead ΠΈΠ· Π²Π΅ΠΊΡ‚ΠΎΡ€Π½ΠΎΠ³ΠΎ ΠΏΠ°ΠΊΠ΅Ρ‚Π°, ΠΌΡ‹ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡƒΠ²ΠΈΠ΄ΠΈΠΌ нСбольшоС ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅:

  Π€Π°ΠΉΠ» xeno-dom
4 ΠšΠ‘ 9,827 мкс
31 ΠšΠ‘ 5,545 мкс
211 ΠšΠ‘ 490,1 мкс  

Но Ρ‚ΡƒΡ‚ Π½ΠΈΡ‡Π΅Π³ΠΎ особСнного. На этот Ρ€Π°Π· я ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡ΠΈΡ‚Π°ΡŽ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ памяти Π² Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… микросСкунд.

DOM API

Π― написал нСсколько Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ для доступа ΠΊ Π½Π°ΡˆΠ΅ΠΌΡƒ Π²Π΅ΠΊΡ‚ΠΎΡ€Ρƒ ΠΈ прСдоставлСния DOM-ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ³ΠΎ API:

Π˜Ρ‚Π°ΠΊ, это Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚.

ПодвСдСниС ΠΈΡ‚ΠΎΠ³ΠΎΠ²

ΠžΠΊΠΎΠ½Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ находятся Π²:

И просто Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ Ρ„Π°ΠΉΠ» Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ 1 ΠœΠ‘ Π½Π΅ Π΄Π°Π΅Ρ‚ сильно Ρ€Π°Π·Π»ΠΈΡ‡Π°ΡŽΡ‰ΠΈΡ…ΡΡ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ²:

  Π±Π΅Π½Ρ‡ΠΌΠ°Ρ€ΠΊΠΈΠ½Π³ 1MB / hexml-dom
врСмя 1,225 мс (1,221 мс .. 1,229 мс)
                     1.000 ΠΊΠ².ΠΌ (1.000 ΠΊΠ².ΠΌ .. 1.000 ΠΊΠ².ΠΌ)
срСднСС 1,239 мс (1,234 мс .. 1,249 мс)
стандартноС ΠΎΡ‚ΠΊΠ»ΠΎΠ½Π΅Π½ΠΈΠ΅ 25,23 мкс (12,28 ... 40,84 мкс)

Π±Π΅Π½Ρ‡ΠΌΠ°Ρ€ΠΊΠΈΠ½Π³ 1MB / xeno-sax
врСмя 1,206 мс (1,203 мс.. 1,211 мс)
                     1.000 ΠΊΠ².ΠΌ (1.000 ΠΊΠ².ΠΌ .. 1.000 ΠΊΠ².ΠΌ)
срСднСС 1,213 мс (1,210 мс .. 1,218 мс)
стандартноС ΠΎΡ‚ΠΊΠ»ΠΎΠ½Π΅Π½ΠΈΠ΅ 14,58 мкс (10,18 мкс .. 21,34 мкс)

Π±Π΅Π½Ρ‡ΠΌΠ°Ρ€ΠΊΠΈΠ½Π³ 1MB / xeno-dom
врСмя 2,768 мс (2,756 мс .. 2,779 мс)
                     1.000 ΠΊΠ².ΠΌ (1.000 ΠΊΠ².ΠΌ .. 1.000 ΠΊΠ².ΠΌ)
срСднСС 2,801 мс (2,791 мс .. 2,816 мс)
стандартноС ΠΎΡ‚ΠΊΠ»ΠΎΠ½Π΅Π½ΠΈΠ΅ 41,10 мкс (30,14 мкс .. 62,60 мкс)  

Π’Π°Π΄Π°! ΠœΡ‹ сопоставили Hexml Π² чистом Haskell, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ бСзопасныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ доступа.ΠœΡ‹ прСдоставили SAX API, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΎΡ‡Π΅Π½ΡŒ быстро, ΠΈ простой дСмонстрационный парсСр DOM со Π·Π½Π°ΠΊΠΎΠΌΡ‹ΠΌ API, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ‚Π°ΠΊΠΆΠ΅ довольно быстр. ΠŸΡ€ΠΈ этом ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ достаточно ΠΌΠ°Π»ΠΎ памяти.

ΠžΠ‘ΠΠžΠ’Π›Π•ΠΠ˜Π• : НСкоторыС люди просили сравнСния с libxml2 (прСдполагая, Ρ‡Ρ‚ΠΎ это ΠΊΠ°ΠΊ-Ρ‚ΠΎ быстрСС). Π’ΠΎΡ‚ ΠΎΡ‚Ρ‡Π΅Ρ‚ ΠΎ критСриях.

Π­Ρ‚ΠΎΡ‚ ΠΏΠ°ΠΊΠ΅Ρ‚ прСдставляСт собой экспСримСнт Π² ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… цСлях, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Haskell ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈ Ρ‡Π΅Π³ΠΎ Π½Π΅Ρ‚, для ΠΎΡ‡Π΅Π½ΡŒ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Π½ΠΎΠΉ области. Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ этот ΠΏΠ°ΠΊΠ΅Ρ‚, ΠΏΠΎΠ΄ΡƒΠΌΠ°ΠΉΡ‚Π΅ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΈΠ½ΡΡ‚ΡŒ Π΅Π³ΠΎ ΠΈ ΠΏΠΎΠ΄Π°Ρ€ΠΈΡ‚ΡŒ Π΅ΠΌΡƒ Ρ…ΠΎΡ€ΠΎΡˆΠΈΠΉ Π΄ΠΎΠΌ.Π― Π½Π΅ ΠΈΡ‰Ρƒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² для обслуТивания.

Π Π°Π±ΠΎΡ‚Π° с Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ XML ΠΈΠ· сцСнариСв

Для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹ΠΌΠΈ Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ XML Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ XML DOM. Π­Ρ‚ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ COM-интСрфСйс для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ элСмСнта ΠΈ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° XML-Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°. ВсС взаимодСйствия с Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ XML Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ Ρ‡Π΅Ρ€Π΅Π· Microsoft XML Core Services (MSXML):

Для получСния Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… свСдСний ΠΎ выраТСниях XPath ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°Ρ… XML DOM, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΠ± ΠΈΡ… ΠΌΠ΅Ρ‚ΠΎΠ΄Π°Ρ… ΠΈ свойствах см. Π‘ΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΡƒΡŽ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡŽ Π² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ MSDN:

Π’ этом Ρ€Π°Π·Π΄Π΅Π»Π΅ всС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ.xml, располоТСнный Π² ΠΊΠΎΡ€Π½Π΅Π²ΠΎΠΉ ΠΏΠ°ΠΏΠΊΠ΅ диска C . Π€Π°ΠΉΠ» Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄:

Π’ этом Ρ„Π°ΠΉΠ»Π΅ Π΅ΡΡ‚ΡŒ ΠΊΠΎΡ€Π½Π΅Π²ΠΎΠΉ ΡƒΠ·Π΅Π» "control" с ΠΏΡΡ‚ΡŒΡŽ ΠΏΠΎΠ΄ΡƒΠ·Π»Π°ΠΌΠΈ. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΏΠΎΠ΄ΡƒΠ·Π΅Π» ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚Ρ€ΠΈ ΡƒΠ·Π»Π°: Ρ‚ΠΈΠΏ, имя ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. Для послСдних Π΄Π²ΡƒΡ… ΡƒΠ·Π»ΠΎΠ² Ρ‚Π°ΠΊΠΆΠ΅ ΡƒΠΊΠ°Π·Π°Π½ΠΎ пространство ΠΈΠΌΠ΅Π½.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 1. ΠžΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ Ρ„Π°ΠΉΠ»ΠΎΠ² XML

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, ΠΊΠ°ΠΊ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ XML-Ρ„Π°ΠΉΠ» ΠΈ ΠΏΡ€ΠΎΠ°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ.

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° TestXML создаСт Π½ΠΎΠ²Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ XML DOM Document Ρ‡Π΅Ρ€Π΅Π· COM ΠΈ Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅Ρ‚ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· Data.xml Ρ„Π°ΠΉΠ». ΠŸΡ€ΠΈ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ΅ Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ XML провСряСт Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚. Π‘Ρ†Π΅Π½Π°Ρ€ΠΈΠΉ Ρ‚Π°ΠΊΠΆΠ΅ провСряСт Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° parseError . Если Ρ„Π°ΠΉΠ» Π±Ρ‹Π» Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ, тСст ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ ΠΊΠΎΡ€Π½Π΅Π²ΠΎΠΉ ΡƒΠ·Π΅Π» ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚ Π΅Π³ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ ProcessNode для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ.

ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° ProcessNode записываСт имя ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΡƒΠ·Π»Π° Π² ΠΆΡƒΡ€Π½Π°Π» (Ссли ΡƒΠ·Π΅Π» Π½Π΅ содСрТит значСния, Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π½Π΅ публикуСтся). Π—Π°Ρ‚Π΅ΠΌ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ ΡƒΠ·Π»Π° ΠΈ Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠ΅ ΡƒΠ·Π»Ρ‹.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 2: ИспользованиС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ XPath для синтаксичСского Π°Π½Π°Π»ΠΈΠ·Π° Ρ„Π°ΠΉΠ»ΠΎΠ² XML

Для синтаксичСского Π°Π½Π°Π»ΠΈΠ·Π° Ρ„Π°ΠΉΠ»ΠΎΠ² XML с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ DOM ΠΌΠΎΠΆΠ½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ выраТСния XPath. Π­Ρ‚ΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ Π²Π°ΠΌ Π»Π΅Π³ΠΊΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ список Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Ρ… ΡƒΠ·Π»ΠΎΠ², Π½Π΅ разбирая вСсь Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚. Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΊΠΎΠ΄Π΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ, ΠΊΠ°ΠΊ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΡŽ ΡƒΠ·Π»ΠΎΠ² ΠΈ ΠΏΠΎΠ΄ΡƒΠ·Π»ΠΎΠ² процСсса.

ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ Π²Ρ‹ΡˆΠ΅ ΠΊΠΎΠ΄ ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΡ…ΠΎΠΆ Π½Π° ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€. ЕдинствСнноС ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄ selectNodes ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅ΠΌ Π΅ΠΌΡƒ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ XPath.ΠœΠ΅Ρ‚ΠΎΠ΄ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΡŽ Π·Π°ΠΏΡ€ΠΎΡˆΠ΅Π½Π½Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². Π—Π°Ρ‚Π΅ΠΌ Ρ€Π°Π·Π±ΠΈΡ€Π°Π΅ΠΌ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΡŽ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 3: Π£Π·Π»Ρ‹ синтаксичСского Π°Π½Π°Π»ΠΈΠ·Π° с пространствами ΠΈΠΌΠ΅Π½

ΠŸΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ Π½Π΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ ΡƒΠ·Π»Ρ‹ с пространством ΠΈΠΌΠ΅Π½. Π’ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π½ΠΈΠΆΠ΅ ΠΊΠΎΠ΄Π΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ, ΠΊΠ°ΠΊ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΡƒΠ·Π΅Π» с пространством ΠΈΠΌΠ΅Π½ ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π΅Π³ΠΎ Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠ΅ ΡƒΠ·Π»Ρ‹.

ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ Π²Ρ‹ΡˆΠ΅ ΠΊΠΎΠ΄ ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΡ…ΠΎΠΆ Π½Π° ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹. Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΌΡ‹ опрСдСляСм свойство SelectionNamespaces Π² Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ setProperty ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅ΠΌ Π΅ΠΌΡƒ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ XPath для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΡƒΠ·Π»Π° с ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΌ пространством ΠΈΠΌΠ΅Π½.ΠŸΡ€ΠΎΡΡ‚Ρ€Π°Π½ΡΡ‚Π²Π° ΠΈΠΌΠ΅Π½ Ρ‡ΡƒΠ²ΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ ΠΊ рСгистру.

.

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π’Π°Ρˆ адрСс email Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½. ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ поля ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Ρ‹ *