• Разбор XML. Базовое использование SimpleXML Разбор xml документа

    Сейчас мы с вами изучим работу с XML. XML - это формат для обмена данными между сайтами. Он очень похож на HTML, только в XML разрешены свои теги и атрибуты.

    Зачем нужен XML при парсинге? Иногда бывает так, что сайт, который вам нужно спарсить, имеет API, с помощью которого можно получить желаемое, особо не напрягаясь. Поэтому сразу совет - перед тем, как парсить сайт, проверьте, нету ли у него API.

    Что такое API? Это набор функций, с помощью которых вы можете слать запрос этому сайту и получать нужный ответ. Вот этот ответ чаще всего приходит в формате XML. Поэтому давайте приступим к его изучению.

    Работа с XML в PHP

    Пусть у вас есть XML. Он может быть в строке, либо хранится в файле или отдаваться по запросу к определенному URL.

    Пусть XML хранится в строке. В этом случае из этой строки нужно создать объект с помощью new SimpleXMLElement :

    $str = " Коля 25 1000 "; $xml = new SimpleXMLElement($str);

    Сейчас у нас в переменной $xml хранится объект с разобранным XML. Обращаясь к свойствам этого объекта можно получать доступ с содержимому тегов XML. Как именно - разберем чуть ниже.

    Если же XML хранится в файле или отдается по обращению к URL (что чаще всего и бывает), то следует использовать функцию simplexml_load_file , которая делает тот же объект $xml :

    Коля 25 1000

    $xml = simplexml_load_file(путь к файлу или урл);

    Приемы работы

    В примерах ниже наш XML хранится в файле или по URL.

    Пусть дан следующий XML:

    Коля 25 1000

    Давайте получим имя, возраст и зарплату работника:

    $xml = simplexml_load_file(путь к файлу или урл); echo $xml->name; //выведет "Коля" echo $xml->age; //выведет 25 echo $xml->salary; //выведет 1000

    Как вы видите, у объекта $xml есть свойства, соответствующие тегам.

    Вы может обратили внимание, что тег нигде не фигурирует при обращении. Это потому, что он корневой тег. Можно переименовать его, например, на - и ничего не поменяется:

    Коля 25 1000

    $xml = simplexml_load_file(путь к файлу или урл); echo $xml->name; //выведет "Коля" echo $xml->age; //выведет 25 echo $xml->salary; //выведет 1000

    Корневой тег в XML может быть только один, так же, как и тег в обычном HTML.

    Давайте чуть модифицируем наш XML:

    Коля 25 1000

    В этом случае у нас получится цепочка обращений:

    $xml = simplexml_load_file(путь к файлу или урл); echo $xml->worker->name; //выведет "Коля" echo $xml->worker->age; //выведет 25 echo $xml->worker->salary; //выведет 1000

    Работа с атрибутами

    Пусть некоторые данные хранятся в атрибутах:

    Номер 1

    $xml = simplexml_load_file(путь к файлу или урл); echo $xml->worker["name"]; //выведет "Коля" echo $xml->worker["age"]; //выведет 25 echo $xml->worker["salary"]; //выведет 1000 echo $xml->worker; //выведет "Номер 1"

    Теги с дефисами

    В XML разрешены теги (и атрибуты) с дефисом. В этом случае обращение к таким тегам происходит так:

    Коля Иванов

    $xml = simplexml_load_file(путь к файлу или урл); echo $xml->worker->{first-name}; //выведет "Коля" echo $xml->worker->{last-name}; //выведет "Иванов"

    Перебор циклом

    Пусть теперь у нас не один работник, а несколько. В этом случае мы можем перебрать наш объект с помощью цикла foreach:

    Коля 25 1000 Вася 26 2000 Петя 27 3000

    $xml = simplexml_load_file(путь к файлу или урл); foreach ($xml as $worker) { echo $worker->name; //выведет "Коля", "Вася", "Петя" }

    Из объекта в нормальный массив

    Если вам неудобно работать с объектом, вы можете преобразовать его в нормальный массив PHP с помощью следующего хитрого приема:

    $xml = simplexml_load_file(путь к файлу или урл); var_dump(json_decode(json_encode($xml), true));

    Больше информации

    Парсинг на основе sitemap.xml

    Зачастую на сайте есть файл sitemap.xml. В этом файле хранятся ссылки на все страницы сайта для удобства индексации их поисковыми системами (индексация - это по сути и есть парсинг сайта яндексом и гуглом).

    В общем-то нас мало должно волновать, зачем нужен этот файл, главное, что если он есть - можно не лазить по страницам сайта какими-либо хитрыми методами, а просто воспользоваться этим файлом.

    Как проверить наличие этого файла: пусть мы парсим сайт site.ru, тогда обратитесь в браузере к site.ru/sitemap.xml - если что-то увидите, значит он там есть, а если не увидите - то увы.

    Если sitemap есть - то в нем содежатся ссылки на все страницы сайта в формате XML. Спокойно забираете этот XML, парсите его, отделяете ссылки на нужные вам страницы любым удобным вам способом (например, анализом URL, который был описан в методе паука).

    В итоге вы получаете список ссылок для парсинга, остается только зайти на них и спарсить нужным вам контент.

    Подробнее об устройстве sitemap.xml читайте в википедии .

    Что вам делать дальше:

    Приступайте к решению задач по следующей ссылке: задачи к уроку .

    Когда все решите - переходите к изучению новой темы.

    Парсинг XML по сути означает проход по XML-документу и возвращение соответствующих данных. И хотя все большее число веб-сервисов возвращает данные в формате JSON, но все же большинство по-прежнему использует XML, поэтому важно освоить парсинг XML, если вы хотите использовать весь спектр доступных интерфейсов API.

    Используя расширение SimpleXML в PHP, которое было добавлено еще в PHP 5.0, работать с XML очень легко и просто. В этой статье я покажу вам, как это делать.

    Основы использования

    Давайте начнем со следующего примера languages.xml :


    >

    > 1972>
    > Dennis Ritchie>
    >

    > 1995>
    > Rasmus Lerdorf>
    >

    > 1995>
    > James Gosling>
    >
    >

    Данный XML-документ содержит список языков программирования с некоторой информацией о каждом языке: год его реализации и имя его создателя.

    Первый шаг заключается в загрузке XML с использованием функций либо simplexml_load_file() , либо simplexml_load_string() . Как понятно из названия функций, первая загружает XML из файла, а вторая будет загружать XML из строки.

    Обе функции считывают все дерево DOM в память и возвращают объект SimpleXMLElement . В приведенном выше примере, объект сохраняется в переменной $languages. Вы можете использовать функции var_dump() или print_r() , чтобы получить подробную информацию о возвращенном объект, если хотите.

    SimpleXMLElement Object
    [ lang] => Array
    [ 0 ] => SimpleXMLElement Object
    [ @ attributes] => Array
    [ name] => C
    [ appeared] => 1972
    [ creator] => Dennis Ritchie
    [ 1 ] => SimpleXMLElement Object
    [ @ attributes] => Array
    [ name] => PHP
    [ appeared] => 1995
    [ creator] => Rasmus Lerdorf
    [ 2 ] => SimpleXMLElement Object
    [ @ attributes] => Array
    [ name] => Java
    [ appeared] => 1995
    [ creator] => James Gosling
    )
    )

    Данный XML содержит корневой элемент languages , внутри которого находятся три элемента lang. Каждый элемент массива соответствует элементу lang в XML-документе.

    Вы можете получить доступ к свойствам объекта при помощи оператора -> . Например, $languages->lang вернет вам объект SimpleXMLElement, который соответствует первому элементу lang . Этот объект содержит два свойства: appeared и creator.

    $languages -> lang [ 0 ] -> appeared ;
    $languages -> lang [ 0 ] -> creator ;

    Вывести на экран список языков и показать их свойства можно очень легко при помощи стандартного цикла, такого как foreach .

    foreach ($languages -> lang as $lang ) {
    printf (
    "" ,
    $lang [ "name" ] ,
    $lang -> appeared ,
    $lang -> creator
    ) ;
    }

    Обратите внимание, как я получил доступ к имени атрибута элемента lang, чтобы получить название языка. Таким образом Вы можете получить доступ к любому атрибуту элемента представленого в виде объекта SimpleXMLElement.

    Работа с пространствами имен

    Во время работы с XML различных веб-сервисов вы не раз столкнетесь с пространствами имен элементов. Давайте изменим наш languages.xml , чтобы показать пример использования пространства имен:



    xmlns:dc =>

    > 1972>
    > Dennis Ritchie>
    >

    > 1995>
    > Rasmus Lerdorf>
    >

    > 1995>
    > James Gosling>
    >
    >

    Теперь элемент creator помещается в пространстве имен dc , который указывает на http://purl.org/dc/elements/1.1/. Если вы попытаетесь распечатать создателей языка, используя наш предыдущий код, то он не будет работать. Для того, чтобы читать пространства имен элементов вам необходимо использовать один из следующих подходов.

    Первый подход заключается в использовании имен URI непосредственно в коде, когда обращаемся к пространству имен элементов. В следующем примере показано, как это делается:

    $dc = $languages -> lang [ 1 ] - > children("http://purl.org/dc/elements/1.1/" ) ;
    echo $dc -> creator ;

    Метод children() принимает пространство имен и возвращает дочерние элементы, которые начинаются с префикса. Он принимает два аргумента, первый из которых является пространством имен XML, и второй необязательный аргумент, который по умолчанию равен false . Если второй аргумент установлен как TRUE, пространство имен будет рассмотрено как префикс. Если FALSE, то пространство имен будет рассмотрено как пространство имен URL.

    Второй подход состоит в чтении имен URI из документа и использование их при обращении к пространству имен элементов. На самом деле это лучший способ доступа к элементам, потому что вы не должны быть жестко привязаны к URI.

    $namespaces = $languages -> getNamespaces (true ) ;
    $dc = $languages -> lang [ 1 ] -> children ($namespaces [ "dc" ] ) ;

    echo $dc -> creator ;

    Метод GetNamespaces() возвращает массив имен префиксов и связанные с ними URI. Он принимает дополнительный параметр, который по умолчанию равен false . Если вы установите его как true , то этот метод будет возвращать имена, используемые в родительских и дочерних узлах. В противном случае, он находит пространства имен, используемые только в родительском узле.

    Теперь вы можете пройтись по списку языков следующим образом:

    $languages = simplexml_load_file ("languages.xml" ) ;
    $ns = $languages -> getNamespaces (true ) ;

    foreach ($languages -> lang as $lang ) {
    $dc = $lang -> children ($ns [ "dc" ] ) ;
    printf (
    "

    %s появился в %d и был создан %s .

    " ,
    $lang [ "name" ] ,
    $lang -> appeared ,
    $dc -> creator
    ) ;
    }

    Практический пример - Парсинг видео-канала с YouTube

    Давайте рассмотрим пример, который получает RSS-feed с канала YouTube и отображает ссылки на все видео из него. Для этого нужно обратится по следующему адресу:

    http://gdata.youtube.com/feeds/api/users/xxx/uploads

    URL возвращает список последних видео с данного канала в формате XML. Мы распарсим XML и получим следующую информацию для каждого видео:

    • Ссылка на видео
    • Миниатюра
    • Название

    Мы начнем с поиска и загрузки XML:

    $channel = "Имя_канала" ;
    $url = "http://gdata.youtube.com/feeds/api/users/" . $channel . "/uploads" ;
    $xml = file_get_contents ($url ) ;

    $feed = simplexml_load_string ($xml ) ;
    $ns = $feed -> getNameSpaces (true ) ;

    Если вы посмотрите на XML-feed, то вы можете увидеть, что там есть несколько элементов entity , каждый из которых хранит подробную информацию о конкретном видео с канала. Но мы используем только миниатюры изображений, адрес видео и название. Эти три элемента являются потомками элемента group , который, в свою очередь, является дочерним для entry :

    >

    >



    Title…>

    >

    >

    Мы просто пройдемся по всем элементам entry , и для каждого из них извлечем необходимую информацию. Обратите внимание, что player, thumbnail и title находятся в пространстве имен media. Таким образом, мы должны действовать, как в предыдущем примере. Мы получаем имена из документа и используем пространство имен при обращении к элементам.

    foreach ($feed -> entry as $entry ) {
    $group = $entry -> children ($ns [ "media" ] ) ;
    $group = $group -> group ;
    $thumbnail_attrs = $group -> thumbnail [ 1 ] -> attributes () ;
    $image = $thumbnail_attrs [ "url" ] ;
    $player = $group -> player -> attributes () ;
    $link = $player [ "url" ] ;
    $title = $group -> title ;
    printf ("

    " ,
    $player , $image , $title ) ;
    }

    Заключение

    Теперь, когда вы знаете, как использовать SimpleXML для разбора XML-данных, вы можете улучшить свои навыки путем анализа различных XML-каналов с различными API. Но важно учитывать, что SimpleXML считывает весь DOM в память, так что если вы парсите большой набор данных, то вы можете столкнуться с нехваткой памяти. Чтобы узнать больше о SimpleXML прочтите документацию .


    Если у Вас возникли вопросы, то для скорейшего получения ответа рекомендуем воспользоваться нашим

    Некоторые примеры этого руководства включают XML-строку. Вместо того, чтобы повторять ее в каждом примере, положите эту строку в файл, который и включайте в каждом примере. Эта строка приведена в следующем примере. Помимо этого можно создать XML-документ и считывать его функцией simplexml_load_file() .

    Пример #1 Файл example.php с XML строкой

    $xmlstr = <<


    PHP: Появление Парсера


    Ms. Coder
    Onlivia Actora


    Mr. Coder
    El ActÓr


    Таким образом, это язык. Это все равно язык программирования. Или
    это скриптовый язык? Все раскрывается в этом документальном фильме,
    похожем на фильм ужасов.




    7
    5


    XML;
    ?>

    SimpleXML пользоваться очень просто! Попробуйте получить какую-нибудь строку или число из базового XML-документа.

    Пример #2 Получение части документа

    include "example.php" ;

    echo $movies -> movie [ 0 ]-> plot ;
    ?>

    Таким образом, это язык. Это все равно язык программирования. Или это скриптовый язык? Все раскрывается в этом документальном фильме, похожем на фильм ужасов.

    В PHP получить доступ к элементу в XML документе, содержащим в названии недопустимые символы (например, дефис), можно путем заключения данного имени элемента в фигурные скобки и апострофы.

    Пример #3 Получение строки

    include "example.php" ;

    echo $movies -> movie ->{ "great-lines" }-> line ;
    ?>

    Результат выполнения данного примера:

    PHP решает все мои проблемы в вебе

    Пример #4 Доступ к неуникальным элементам в SimpleXML

    В том случае, если существует несколько экземпляров дочерних элементов в одном родительском элементе, то нужно применять стандартные методы итерации.

    include "example.php" ;

    $movies = new SimpleXMLElement ($xmlstr );

    /* Для каждого узла , мы отдельно выведем имя . */
    foreach ($movies -> movie -> characters -> character as $character ) {
    echo $character -> name , " играет " , $character -> actor , PHP_EOL ;
    }

    ?>

    Результат выполнения данного примера:

    Ms. Coder играет Onlivia Actora Mr. Coder играет El ActÓr

    Замечание :

    Свойства ($movies->movie в предыдущем примере) не являются массивами. Это итерируемый объект в виде массива .

    Пример #5 Использование атрибутов

    До сих пор мы только получали названия и значения элементов. SimpleXML может также получать доступ к атрибутам элемента. Получить доступ к атрибуту элемента можно так же, как к элементам массива (array ).

    include "example.php" ;

    $movies = new SimpleXMLElement ($xmlstr );

    /* Доступ к узлу первого фильма.
    * Так же выведем шкалу оценок. */
    foreach ($movies -> movie [ 0 ]-> rating as $rating ) {
    switch((string) $rating [ "type" ]) { // Получение атрибутов элемента по индексу
    case "thumbs" :
    echo $rating , " thumbs up" ;
    break;
    case "stars" :
    echo $rating , " stars" ;
    break;
    }
    }
    ?>

    Результат выполнения данного примера:

    7 thumbs up5 stars

    Пример #6 Сравнение элементов и атрибутов с текстом

    Для сравнения элемента или атрибута со строкой или для передачи в функцию в качестве текста, необходимо привести его к строке, используя (string) . В противном случае, PHP будет рассматривать элемент как объект.

    include "example.php" ;

    $movies = new SimpleXMLElement ($xmlstr );

    if ((string) $movies -> movie -> title == "PHP: Появление Парсера" ) {
    print "Мой любимый фильм." ;
    }

    echo htmlentities ((string) $movies -> movie -> title );
    ?>

    Результат выполнения данного примера:

    Мой любимый фильм.PHP: Появление Парсера

    Пример #7 Сравнение двух элементов

    Два элемента SimpleXMLElements считаются разными, даже если они указывают на один и тот же объект, начиная с PHP 5.2.0.

    include "example.php" ;

    $movies1 = new SimpleXMLElement ($xmlstr );
    $movies2 = new SimpleXMLElement ($xmlstr );
    var_dump ($movies1 == $movies2 ); // false начиная с PHP 5.2.0
    ?>

    Результат выполнения данного примера:

    Пример #8 Использование XPath

    SimpleXML включает в себя встроенную поддержку XPath . Поиск всех элементов :

    include "example.php" ;

    $movies = new SimpleXMLElement ($xmlstr );

    foreach ($movies -> xpath ("//character" ) as $character ) {
    echo $character -> name , " играет " , $character -> actor , PHP_EOL ;
    }
    ?>

    "// " служит в качестве шаблона. Для указания абсолютного пути, опустите одну из косых черт.

    Результат выполнения данного примера:

    Ms. Coder играет Onlivia Actora Mr. Coder играет by El ActÓr

    Пример #9 Установка значений

    Данные в SimpleXML не обязательно должны быть неизменяемыми. Объект позволяет манипулировать всеми элементами.

    include "example.php" ;
    $movies = new SimpleXMLElement ($xmlstr );

    $movies -> movie [ 0 ]-> characters -> character [ 0 ]-> name = "Miss Coder" ;

    echo $movies -> asXML ();
    ?>

    Результат выполнения данного примера:

    PHP: Появление Парсера Miss Coder Onlivia Actora Mr. Coder El ActÓr 7 5

    Пример #10 Добавление элементов и атрибутов

    Начиная с PHP 5.1.3, SimpleXML имеет возможность легко добавлять дочерние элементы и атрибуты.

    include "example.php" ;
    $movies = new SimpleXMLElement ($xmlstr );

    $character = $movies -> movie [ 0 ]-> characters -> addChild ("character" );
    $character -> addChild ("name" , "Mr. Parser" );
    $character -> addChild ("actor" , "John Doe" );

    $rating = $movies -> movie [ 0 ]-> addChild ("rating" , "PG" );
    $rating -> addAttribute ("type" , "mpaa" );

    echo $movies -> asXML ();
    ?>

    Результат выполнения данного примера:

    PHP: Появление Парсера Ms. Coder Onlivia Actora Mr. Coder El ActÓr Mr. ParserJohn Doe Таким образом, это язык. Это все равно язык программирования. Или это скриптовый язык? Все раскрывается в этом документальном фильме, похожем на фильм ужасов. PHP решает все мои задачи в web 7 5 PG

    Пример #11 Взаимодействие с DOM

    PHP может преобразовывать XML-узлы из SimpleXML в формат DOM и наоборот. Этот пример показывает, как можно изменить DOM-элемент в SimpleXML.

    $dom = new DOMDocument ;
    $dom -> loadXML ("чепуха" );
    if (! $dom ) {
    echo "Ошибка при разборе документа" ;
    exit;
    }

    $books = simplexml_import_dom ($dom );

    echo $books -> book [ 0 ]-> title ;
    ?>

    Результат выполнения данного примера:

    4 years ago

    There is a common "trick" often proposed to convert a SimpleXML object to an array, by running it through json_encode() and then json_decode(). I"d like to explain why this is a bad idea.

    Most simply, because the whole point of SimpleXML is to be easier to use and more powerful than a plain array. For instance, you can write bar -> baz [ "bing" ] ?> and it means the same thing as bar [ 0 ]-> baz [ 0 ][ "bing" ] ?> , regardless of how many bar or baz elements there are in the XML; and if you write bar [ 0 ]-> baz [ 0 ] ?> you get all the string content of that node - including CDATA sections - regardless of whether it also has child elements or attributes. You also have access to namespace information, the ability to make simple edits to the XML, and even the ability to "import" into a DOM object, for much more powerful manipulation. All of this is lost by turning the object into an array rather than reading understanding the examples on this page.

    Additionally, because it is not designed for this purpose, the conversion to JSON and back will actually lose information in some situations. For instance, any elements or attributes in a namespace will simply be discarded, and any text content will be discarded if an element also has children or attributes. Sometimes, this won"t matter, but if you get in the habit of converting everything to arrays, it"s going to sting you eventually.

    Of course, you could write a smarter conversion, which didn"t have these limitations, but at that point, you are getting no value out of SimpleXML at all, and should just use the lower level XML Parser functions, or the XMLReader class, to create your structure. You still won"t have the extra convenience functionality of SimpleXML, but that"s your loss.

    2 years ago

    If your xml string contains booleans encoded with "0" and "1", you will run into problems when you cast the element directly to bool:

    $xmlstr = <<

    1
    0

    XML;
    $values = new SimpleXMLElement($xmlstr);
    $truevalue = (bool)$values->truevalue; // true
    $falsevalue = (bool)$values->falsevalue; // also true!!!

    Instead you need to cast to string or int first:

    $truevalue = (bool)(int)$values->truevalue; // true
    $falsevalue = (bool)(int)$values->falsevalue; // false

    9 years ago

    If you need to output valid xml in your response, don"t forget to set your header content type to xml in addition to echoing out the result of asXML():

    $xml = simplexml_load_file ("..." );
    ...
    ... xml stuff
    ...

    //output xml in your response:
    header ("Content-Type: text/xml" );
    echo $xml -> asXML ();
    ?>

    9 years ago

    From the README file:

    SimpleXML is meant to be an easy way to access XML data.

    SimpleXML objects follow four basic rules:

    1) properties denote element iterators
    2) numeric indices denote elements
    3) non numeric indices denote attributes
    4) string conversion allows to access TEXT data

    When iterating properties then the extension always iterates over
    all nodes with that element name. Thus method children() must be
    called to iterate over subnodes. But also doing the following:
    foreach ($obj->node_name as $elem) {
    // do something with $elem
    }
    always results in iteration of "node_name" elements. So no further
    check is needed to distinguish the number of nodes of that type.

    When an elements TEXT data is being accessed through a property
    then the result does not include the TEXT data of subelements.

    Known issues
    ============

    Due to engine problems it is currently not possible to access
    a subelement by index 0: $object->property.

    8 years ago

    Using stuff like: is_object($xml->module->admin) to check if there actually is a node called "admin", doesn"t seem to work as expected, since simplexml always returns an object- in that case an empty one - even if a particular node does not exist.
    For me good old empty() function seems to work just fine in such cases.

    8 years ago

    A quick tip on xpath queries and default namespaces. It looks like the XML-system behind SimpleXML has the same workings as I believe the XML-system .NET uses: when one needs to address something in the default namespace, one will have to declare the namespace using registerXPathNamespace and then use its prefix to address the otherwise in the default namespace living element.

    $string = <<

    Forty What?
    Joe
    Jane

    I know that"s the answer -- but what"s the question?


    XML;

    $xml = simplexml_load_string ($string );
    $xml -> registerXPathNamespace ("def" , "http://www.w3.org/2005/Atom " );

    $nodes = $xml -> xpath ("//def:document/def:title" );

    ?>

    9 years ago

    While SimpleXMLElement claims to be iterable, it does not seem to implement the standard Iterator interface functions like::next and::reset properly. Therefore while foreach() works, functions like next(), current(), or each() don"t seem to work as you would expect -- the pointer never seems to move or keeps getting reset.

    6 years ago

    Если кодировка XML-документа отличается от UTF-8, объявление кодировки должно следовать сразу после version="..." и перед standalone="...". Это требование стандарта XML.

    If encoding XML-document differs from UTF-8. Encoding declaration should follow immediately after the version = "..." and before standalone = "...". This requirement is standard XML.


    Ok

    Русский язык. Russian language
    Fatal error: Uncaught exception "Exception" with message "String could not be parsed as XML" in...

    1 этап. Прохождение тестирования(взаимодействие с тестовым контуром ГИС ГМП) #Адрес сервиса ГИС ГМП тестовый:
    gisgmp.wsdlLocation=http://213.59.255.182:7777/gateway/services/SID0003663?wsdl
    gisgmp.wsdlLocation.endPoint=http://213.59.255.182:7777/gateway/services/SID0003663
    Этот адрес прописывается в настройках СП.Дополнительно требуется прописать в файле настроек логгирования, указав значение TRACE. После внесения указанных значений, требуется запустить СП и клиент АЦК (перезапустить, если уже был запущен) Далее, из ЗОР или Заявки БУ/АУ на выплату средств требуется выполнить действие "Создать Сведение о платеже", если будут пройдены системные контроли - то создастся Сведение о платеже. Которое в последствии нужно будет выгрузить.
    После выгрузки требуется проверить статус действием "Запрос статуса обработки". После чего ЭД Сведение о платеже переходит на статус "Принят ГИС ГМП" -…

    Дано: Таблица MSG (сообщения) с большим количеством записей.
    CREATETABLEmsg(idINTEGERNOTNULLPRIMARYKEY,descriptionCHAR(50)NOTNULL, date_createDATE);
    Задача:
    Необходимо очистить таблицу от данных/
    Решение: Для решения данной задачи есть несколько способов. Ниже описание и пример каждого из них.
    Самый простой способ (первый вариант ) - выполнение оператора удаления записи. При его выполнении вы будете видеть результат (сколько записей удалено). Удобная штука когда необходимо точно знать и понимать правильные ли данные удалены. НО имеет недостатки перед другими вариантами решения поставленной задачи.

    DELETE FROMmsg;--Удалит все строки в таблице--Удалит все строки у которых дата создания "2019.02.01" DELETE FROMmsg WHEREdate_create="2019.02.01";

    Второй вариант . Использование оператораDML для очистки всех строк в таблице.
    TRUNCATETABLEmsg;
    При этом несколько особенностей использования данного оператора:
    Его нет в Firebird, поэтому пользуемся первым и третьим вариантом.После выпо…

    Актуальные адреса для обращений к ЕСМЭВ 3.0 Напоминаем, что в соответствии с ранее опубликованной информацией на Технологическом портале СМЭВ 3.0 необходимо использовать актуальные адреса размещения Единого электронного сервиса:
    адрес единого электронного сервиса среды разработки СМЭВ 3.0, соответствующий схеме 1.1 - http://smev3-d.test.gosuslugi.ru:7500/smev/v1.1/ws?wsdl , при этом сервис будет также доступен по адресу