- КАК: Linux и Unix HTML и XML-редакторы — 2021
- Basic editing with vi (vim) text editor for Unix (Октябрь 2021).
- Table of Contents:
- Komodo Edit и Komodo IDE
- Aptana Studio 3
- NetBeans
- Screem
- голубая рыба
- Eclipse Photon
- UltraEdit
- SeaMonkey
- GNU Emacs
- Oxygen XML Editor
- EditiX
- Geany
- Связь между SGML, HTML и XML
- Изучите базовый веб-язык: HTML, CSS и XML
- 17 лучших бесплатных HTML-редакторов для Linux и UNIX
- Linux чем открыть xml файл
КАК: Linux и Unix HTML и XML-редакторы — 2021
Basic editing with vi (vim) text editor for Unix (Октябрь 2021).
Table of Contents:
Разработчики, которые пишут HTML для Linux и UNIX, имеют богатый выбор редакторов HTML и XML на выбор. Редактор HTML или интегрированная среда разработки (IDE), которая лучше всего подходит вам, зависит от функций, которые вам нужны. Ознакомьтесь с этим списком редакторов HTML и XML, чтобы узнать, какой из них соответствует вашим потребностям.
Komodo Edit и Komodo IDE
Существуют две версии Komodo: Komodo Edit и Komodo IDE.
Komodo Edit — отличный бесплатный редактор XML. Он включает в себя множество функций для разработки HTML и CSS, и вы можете получать расширения для добавления языков или других полезных функций, таких как специальные символы.
Komodo IDE — отполированный инструмент для разработчиков, которые выполняют модульное тестирование, отладку и профилирование кода и которые создают больше, чем веб-страницы. Он поддерживает широкий спектр языков, включая Python, PHP, Perl, JavaScript, HTML, CSS и многое другое. Если вы создаете веб-приложения Ajax, взгляните на эту среду IDE. Он отлично подходит для команд, поскольку имеет встроенную поддержку совместной работы.
Komodo Edit — бесплатная загрузка. Komodo IDE предлагает несколько платных планов (и 21-дневную пробную версию), которые включают единый лицензионный план, план для команд из пяти человек и один для полной лицензии сайта для команд из 20 и более человек.
Aptana Studio 3
Aptana Studio 3 с открытым исходным кодом — интересное занятие по разработке веб-страниц. Он поддерживает HTML5, CSS3, JavaScript, Rails, Ruby, PHP, Python и другие элементы, которые позволяют создавать богатые интернет-приложения.
Настраиваемая Aptana Studio 3 имеет встроенный отладчик, мастер развертывания и интеграцию Git. Если вы разработчик, который создает веб-приложения, Aptana Studio — хороший выбор.
NetBeans
NetBeans IDE — это бесплатная Java IDE, которая поможет вам создать надежные веб-приложения. Как и большинство IDE, он имеет крутую кривую обучения, но как только вы привыкнете к ней, вы будете подключены. Одной из приятных функций является контроль версий, включенный в IDE, что полезно для людей, работающих в больших средах разработки. Используйте среду IDE NetBeans для разработки настольных, мобильных и веб-приложений. Он работает с Java 8, JavaScript, HTML5, PHP, C / C ++ и т. Д. Если вы пишете Java и веб-страницы, это отличный инструмент.
Screem
Screem — это среда для веб-разработки. Этот универсальный редактор текстовых веб-страниц и редактор XML не обеспечивают отображение WYSIWYG. Вы видите только чистый HTML-код на экране. Тем не менее, Screem распознает используемый вами тип doctype и проверяет и дополняет теги на основе этой информации. Он включает в себя мастера и помощь, которые вы не всегда видите в программном обеспечении Unix. Любой язык, который может быть определен doctype, можно редактировать в Screem.
голубая рыба
Bluefish — полнофункциональный веб-редактор для Linux, Windows и Macintosh. Он предлагает кодовую проверку орфографии, автозаполнение многих языков программирования, включая HTML, PHP и CSS, фрагменты, управление проектами и автоматическое сохранение. Это, прежде всего, редактор кода, а не только веб-редактор. Это означает, что он имеет большую гибкость для веб-разработчиков, которые пишут больше, чем просто HTML, но если вы дизайнер по своей природе, вы можете предпочесть что-то другое.
Bluefish относительно легкий для графического редактора. Он быстро и может загружать сотни файлов за считанные секунды.
Eclipse Photon
Eclipse Photon — это мощная среда разработки с открытым исходным кодом, которая идеально подходит для людей, которые много кодируют на разных платформах и на разных языках. Eclipse Photon поддерживает Java 10 и структурирован для использования плагинов, поэтому вы выбираете соответствующие плагины для своих конкретных потребностей. Если вы создаете сложные веб-приложения, Eclipse имеет функции, которые упрощают создание приложения.
UltraEdit
UltraEdit — это текстовый редактор, но он обладает многими функциями, которые обычно встречаются в инструментах, считающихся исключительно веб-редакторами. Если вы ищете мощный текстовый редактор, который может обрабатывать практически любую текстовую ситуацию, с которой вы столкнетесь, UltraEdit — отличный выбор.
UltraEdit создан для редактирования больших файлов. Он поддерживает дисплеи UHD, легко настраивается и имеет встроенные возможности FTP. Особенности включают в себя мощные возможности поиска, сравнение файлов, подсветку синтаксиса, автоматическое закрытие тегов XML / HTML, смарт-шаблонов и многие другие.
Используйте UltraEdit для редактирования текста, веб-разработки, системного администрирования, разработки настольных систем и сравнения файлов.
SeaMonkey
SeaMonkey — это комплексный пакет приложений для всех приложений Mozilla. Он включает в себя веб-браузер, клиент почты и группы новостей, клиент чата IRC, инструменты для веб-разработки и редактор HTML. Одна из приятных особенностей использования SeaMonkey заключается в том, что у вас встроенный браузер, поэтому тестирование — легкий ветерок. Кроме того, это бесплатный редактор WYSIWYG со встроенным FTP для публикации ваших веб-страниц.
GNU Emacs
Emacs — это текстовый редактор, который можно найти на большинстве систем Linux, что упрощает редактирование страницы, даже если у вас нет стандартного программного обеспечения. Основные особенности включают поддержку XML, поддержку сценариев, расширенную поддержку CSS, полную поддержку Unicode, систему упаковки и встроенный валидатор, а также редактирование HTML с цветовым кодированием.
Emacs также включает в себя планировщик проекта, устройство чтения писем и новостей, интерфейс отладчика и календарь. Он поставляется со встроенной документацией и учебными пособиями для новых пользователей.
Oxygen XML Editor
Oxygen — это высококачественный набор средств редактирования XML и средств разработки.Он предлагает валидацию и оценку схемы ваших документов, а также различные языки XML, такие как XPath и XHTML. Это не лучший выбор для веб-дизайнеров, но если вы обрабатываете XML-документы в своей работе, это полезно.
Функция совместной работы с Oxygen XML Editor позволяет эффективно сотрудничать с другими пользователями. Oxygen включает поддержку нескольких рамок публикации и может выполнять запросы XQuery и XPath в собственной базе данных XML.
EditiX
EditiX — это XML-редактор, который можно использовать для написания допустимых документов XHTML, но его основная сила заключается в функциональности XML и XSLT. Это не так полно, как программы для редактирования веб-страниц, но если вы делаете много XML и XSLT, вам понравится этот редактор.
Geany
Geany — это текстовый редактор, который работает на любой платформе, поддерживающей библиотеки GTK. Он предназначен для базовой среды разработки, которая является небольшой и быстрой загрузкой. Вы можете разрабатывать все свои проекты в одном редакторе, потому что Geany поддерживает HTML, XML, PHP и многие другие языки и языки программирования.
Geany поддерживает подсветку синтаксиса, холодную складку, свойства сетки CSS и подключаемый интерфейс. Он поддерживает языки C, Java, PHP, HTML, Python и Perl.
Связь между SGML, HTML и XML
Узнайте о взаимосвязи между языками разметки SGML, HTML и XML, в том числе, когда они используются и как они соединяются.
Изучите базовый веб-язык: HTML, CSS и XML
Веб-дизайн имеет собственный набор языков. Изучите основы, которые вам нужно знать, чтобы начать создавать веб-сайты, включая основы HTML, CSS и XML.
17 лучших бесплатных HTML-редакторов для Linux и UNIX
Ищете Linux-редактор HTML? Или, может быть, один для UNIX? Этот список бесплатных редакторов HTML для Linux должен помочь. Включены как текстовые, так и WYSIWYG редакторы.
Источник
Linux чем открыть xml файл
ОС Debian GNU/Linux: Как использовать библиотеку XML
Вернуться в Доки-Токи | ||
Зачем нужна библиотека XML Главной проблемой с какой может столкнуться разработчик офисных приложений в ОС Debian GNU/Linux это хранение текстовых сообщений списком или иерархической структурой, например оглавление прайс-листа. С одной стороны можно использовать двухмерный массив, но для этого потребуется выделять большое количество памяти в стеке, что не есть хорошо, даже хочу сказать отвратительно. Поэтому мы будем использовать библиотеку XML, которая позволит сразу убить двух зайцев — не раздувать размер стека и получить гибкость в использовании и управлении списком или иерархической структурой символьных сообщений к которым может быть причисленно — "Оглавление документа", "Списка текстовых сообщений", "Иерархическая структура прайс-листа"(или прейскуранта цен) . В качестве, примера мы с вами рассмотрим файл ldapsi-msg.xml, который хранит текстовые сообщения для кодов ошибок, возвращаемые API-функции библиотеки LDAP в переменной ldap_errno. Поэтому начнём с структуры XML-файла. Консорциумом W3C принят стандарт eXtensible Markup Language (XML), который является расширяемым языком разметки. Он весьма прост в использовании в отличии от своего предшественника SGM, что мы увидим ниже. Файл, который содержит XML-документ должен начинаться с тега в который называется XML-декларацией без которого не один XML-парсер не будет разбирать файл, а просто вернет ошибку. Поэтому этот тег является обязательным. Кроме, того мы должны указать в XML-декларации кодировку, чтобы избежать неправильного отображения текста кириллицей, поэтому добавляем в тег свойство encoding=»UTF-8″. Тогда XML-декларация будет у нас выглядеть следующим образом. Тег XML-декларации с кодировокой Затем, мы должны указать корневой узел, который будет вершиной иерархической структуры XML-документа. В рассматриваемом файле ldapsi-msg.xml уровень вложенности является небольшим и равен единице. Потому что корневой элемент содержит дочерние элементы с сообщениями, имеющие свойства, которые указываются после названия тега . Они состоят из пары — ключевого слова, являющееся именем свойства и значением, указанного в кавычках, после ключевого слова через знак равно(‘=’). Формат тега LDAP-сообщения Свойство id — идентификатор LDAP-сообщения, эквивалентен коду ошибки LDAP. Множество которых содержаться в заголовочном файле библиотеки LDAP в виде макросов c численными значениями в шестнадцатеричной системе счисления(HEX). Поэтому значение свойства id должено не иметь повторений и быть уникально. Свойство msg — содержит текст сообщения, которые были взяты из LDAP_ERROR(3), и соответствуют коду ошибки, указанному в десятичной системе(DEC) счисления в свойстве id. В корневом теге какие-либо свойства игнорируются. Структура XML-файла ldapsi-msg.xml Прежде чем начать разбирать, созданный с Вами файл, мы установим пакет libxml2, который содержит бинарные сборки библиотеки XML версии 2(разделяемая и статическая библиотека), заголовочные файлы, документацию, средства отладки и утилиты командной строки. #apt-get install libxml2 libxml2-dbg libxml2-dev libxml2-utils Теперь можем смело перейти к написанию читателя, который будет вытаскивать сообщения по свойству id из тега . Как мы говорили в ранее, XML-документ имеет свою структуру, поэтому в библиотеке XML2, предусмотрен маркер имеющий тип xmlDoc от структуры _xmlDoc . В ней очень много полей, но мы рассмотрим не всю структуру xmlDoc, а только часть её, которая в дальнейшем нас будет интересовать. Структура маркера XML документа structure xmlDoc Для создания маркера XML-документа воспользуемся функцией xmlParseDoc(),строка 30, которая берет единственный аргумент — имя XML-файла. В этом аргументе указывается абсолютный путь к этому файлу(от корня ‘/’ ) или относительный,где корнем ‘./’ является текущая директория. Напишем небольшую программку, которая откроет XML-документ и мы выведем этого XML-документа имя XML-файла, версию XML и кодировку, строки 36-39, с помощью соответствующих полей маркера xmlDoc, по указателю doc. Исходный код программы xml_metadoc Исходный код xml_metadoc 1 /* 21int main( gint argc, gchar **argv ) 22< 23 xmlDoc *doc; 24 25if( argc != 2 ) < 26 fprintf(stderr, » usage: %s «, argv[0]); 27return 1; 28 > 29 30 doc= xmlParseFile (argv[1]); 31if ( doc == NULL ) < 32 fprintf(stderr, «This document was not parsed(xml-file=[%s])!\n » , argv[0]); 33return 1; 34 > 35 36 fprintf(stdout, «XML document was parsed successfully(xml-file=[%s])!\n » , argv[0] ); 37 fprintf(stdout, «The name of XML document: %s\n «, doc->name ); 38 fprintf(stdout, «The version of XML standard: %s\n «, doc->version ); 39 fprintf(stdout, «The external initial encoding: %s\n «, doc->encoding ); 40 41 xmlFreeDoc (doc); 42 43return 0; 44 > 45 46 /*eof */ Хочу напомнить вечно спешащим братьям по цеху, чтобы они не забывали удалять номера строк, которые указаны в начале каждой строки в примере. Иначе, они будут долго удивляться — почему это компилятор на этапе трансляции исходного кода вернул ошибку. Как видим в конце, перед завершением, мы вызываем в строке 41 функцию xmlFreeDoc(), которая освобождает память используемую под маркер типа xmlDoc. Это надо делать всегда, чтобы избежать утечки памяти. /Work/xml-apps$./xml_metadoc ldapsi-msg.xml Теперь перейдем к рекурсивному чтению структуры XML-документа, тем самым усложним наш предыдущий пример. Мы будем выводить только имена элементов и их свойств, если они есть в наличии. Пишем функцию xml_looking() рекурсивного обхода структуры XML документа и выводим на stdout то, что прочитали. Рекурсивный обход применяем потому, что мы не знаем название элементов и их свойств. Программу назовем ldap_errmsg_filetest, её исходный код сохраним в файле ldap_errmsg_filetest.с. Как собирать программу ldap_errmsg_filetest $(CC) `xml2-config —cflags` ldap_errmsg_filetest.c -o ldap_errmsg_filetest `xml2-config —libs` Переменная $(CC) указывает на компилятор С, которым собирается программа ldap_errmsg_filetest. Код программы ldap_errmsg_filetest, версия 0.1 1/* Как видим по сравнению с программой xml_metadoc, которая выводит метаданные XML документа из маркера xmlDoc, программа ldap_errmsg_filetest значительно усложнилась, что видим из её кода в файле ldap_errmsg_filetest.c . Изменился заголовок, строки 1-30, он приведён в соответствии с указаниями, которые приводятся в конце лицензии GNU General Public License. В строках 36-38 указываются заголовочные файлы прототипов API-функций и типов данных XML библиотеки libxml2, которые мы используем в этой программе. А в строках 32-34, заголовочные файлы прототипов API-функций и типов данных С библиотеки, известной всем как GLIBC . В строке 44, 45 объявляем два указателя на маркеры — документа XML и корневого элемента в этом документе. Маркер документа XML(xmlDoc) рассматривался нами выше, а корневой элемента(xmlNode) будем разберём чуточку ниже. В строке 44, 45 объявляем два указателя на маркеры — документа XML и корневого элемента в этом документе. Маркер документа XML(xmlDoc) рассматривался нами выше, а корневого элемента(xmlNode) разберём чуточку ниже. В строке 46 объявляем целочисленную переменную line, которая будет являться номером строки. Так корневой элемент будет всегда в нулевой строке XML-документа. Строка с XML-декларацией игнорируется. В строке 49 инициализируем статическую переменную total_line типа int которая будет содержать итоговое количество прочитанных элементов XML-документа. Эта переменная была объявлена ранее в строке 40. В строке 56 мы производим разбор XML-документа через API функцию xmlParseFile() библиотеки libxml2. Если указатель на маркер у нас не нулевой мы переходим к анализу дерева XML-документа. Иначе, мы немедленно завершимся с ненулевым значением и передачей на stderr сообщения, что этот XML-документ не был разобран с именем файла, указанного в первом и единственном аргументе программы. Любые отклонения от стандарта XML могут привести к такому плачевному результату. В строке 65, мы пытаемся получить указатель на корневой элемент, который описывается типом xmlNode Этот тип мы будем встречать не только как описание элементов XML-документа, но и их свойств. Тип xmlNode является структурой _xmlNode. Из этой структуры нам будут интересны поля связанные с указателем на дочерние и соседние элементы, а так же тип элемента, который нам понадобится при анализе его структуры, но об этом позже. Ниже привожу декларацию самой структуры _xmlNode и интересующих нас полей. Structure xmlNode struct _xmlNode < В строке 66, если указатель на корневой элемент не был получен, считаем, что документ пустой и завершаемся с ненулевым значением, т.к. не достигли цели. Иначе, мы переходим к рекурсивному обходу с помощью вызова функции xml_document_round(), которая реализует его в строках 80-112. В основном цикле этой функции, строки 83-110, мы просматриваем соседние элементы, до тех пор пока указатель curr_dn — текущим элемент не будет равен нулю. Если null-указатель будет передан в 1-м аргументе самой функции xml_document_round(), то как мы видим по условию выполнения цикла, строка 83, функция будет немедленно завершена. Кстати, на манипуляции с этой переменной и самой функции xml_document_round(), которая вызывается из собственного тела функции, строится рекурсия. В строки 87- 89 мы осуществляем кол-во отступов от первого символа в строке, которые задаются уровнем вложения элемента в иерархической структуре XML-документа. Его значение содержится в 2-ом аргумент level функции xml_document_round(), значение которого приращивается в строке 107 перед рекурсивным вызовом функции xml_document_round(). В строках 90-102 мы выводим содержимое свойств элемента. Как мы уже говорили свойства элемента описываются одной и той же структурой, что и сам элемент. Поэтому имя свойства и элемента всегда находится в поле _xmlNode::name, а вот само значение свойства возвращает API-функция xmlGetProp() библиотеки libxml2, который мы передаем в 1-м аргументе. Пример использования программы ldap_errmsg_filetest /Work/xml-apps$. ./ldap_errmsg_filetest ldapsi-msg.xml Теперь, как только мы научились выводить содержимое XML-документа, мы можем приступить к его анализу для выявления нарушений в декларации элемента , который должен содержать код ошибки LDAP(свойство id) и следующее за ним текстовое сообщение(свойство — msg). Такой формат элемента , который мы разбирали выше, является обязательным и отсутствие какого-либо одного из двух свойств этого элемента будем считать грубой ошибкой и завершать немедленно дальнейшую проверку содержимого XML-документа выходом из программы. Поэтому мы добавляем второй тест, который будет на самом деле искать отклонения от формата элемента и выводить их на stderr. Так же мы будем проверять имя элемента , чтобы выявить ошибки в его написании. Тестирование будет производится случайным перебором кодов ошибок LDAP(свойство id) в диапазоне значений от 0 до 25 с количеством итераций равным 30-ти, что непременно приведет к ошибки теста в нахождении элемента по значению свойства id, в связи c отсутствием таких в нашем файле ldapsi-msg.xml, которые содержали бы значения от 22 до 25. Эту ошибку теста, мы будем игнорировать, так как она не относится к нарушению формата представления элемента , а скорее просто указывает, что такой код ошибки в библиотеки LDAP не используется. Код программы ldap_errmsg_filetest, версия 0.2 1 /* 40static int total_line; 41static void xml_document_round ( xmlNodePtr curr_dn, int level, int line ); 42static long int my_errno; 43 44#define NONE_MYERROR 0x00 45#define DOC_EMPTY_MYERROR 0x10 46#define DOC_INVALID_FORMAT_MYERRROR 0x11 47#define DOC_HAVE_NOT_LDAP_MSGS_MYERROR 0x12 48#define DOC_NOT_FOUND_LDAP_MSG_MYERROR 0x13 49 50#define PROG_EXIT(res,msg) < \ 51 xmlFreeDoc (doc); \ 52 free(msg); \ 53 exit(res); \ 54 > 55 56#define TEST_ITERS 30 57 58static char* ldap_message_get_by_id ( xmlDocPtr doc, int veryfied_id, int *line ); 59 60int main( int argc,char **argv ) 61< 62 xmlDocPtr doc; 63 xmlNodePtr root_dn; 64int line=0, iter; 65 66 total_line = 0; 67 68 if( argc != 2 ) < 69 fprintf(stderr, » usage: %s \n», argv[0]); 70 return 1; 71 > 72 73 doc = xmlParseFile ( argv[1] ); 74 if ( doc == NULL ) < 75 fprintf(stderr, «This document was not parsed. xml-file=[%s]\n » , argv[0]); 76 return 1; 77 > 78 /* 79 execution the 1st test. 80 */ 81 fprintf(stdout, «1st test. XML document looking that is \’%s\’ xml-file\n», argv[1] ); 82 root_dn = xmlDocGetRootElement ( doc ); 83 if ( root_dn == NULL ) < 84 fprintf(stderr, «The error occur! This document is empty!\n» ); 85 xmlFreeDoc (doc); 86 return 1; 87 > 88 89 fprintf(stdout, «line %06d: \n», line, root_dn->name ); 90 xml_document_round( root_dn->children , 1, line ); 91 fprintf(stdout, «line %06d: \n», total_line, root_dn->name ); 92 fprintf ( stdout, «test is passed!\n» ); 93 /* 94 execution the 2st test. 95 */ 96 fprintf(stdout, «2nd test. Checking that the XML document have the ldap error messages \ 97 and this document have a right format.\n»); 98 99 srandom((unsigned int)time(0)); 100for ( iter = 0; iter type == XML_ELEMENT_NODE ) < 143 int i; 144 fprintf(stdout, «line %06d: «, ++line ); 145for ( i = 0; i properties ) < 149 xmlAttrPtr properties; 150 151 fprintf(stdout, » name ); 152 properties = curr_dn->properties; 153while ( properties ) < 154 fprintf(stdout, «%s=\»%s\» «, properties->name, 154 xmlGetProp ( curr_dn, properties->name ) ); 155 156 properties = properties->next; 157 > 158 fprintf(stdout, «/>\n»); 159 >else< 160 fprintf(stdout, » \n»,curr_dn->name ); 161 > 162 > 163if ( curr_dn->children ) < 164 xml_document_round( curr_dn->children, ++level , line ); 165 > 165 curr_dn = curr_dn->next; 166 > 167 total_line = line + 1; 168 > 169 170static char* ldap_message_get_by_id ( xmlDocPtr doc, int check_id, int *line ) 171< 172 xmlNodePtr curr_dn; 173 xmlNodePtr root_dn; 174 175int look_line = 1; 176 177 *line = 0; 178 total_line = 1; 179 180 my_errno = NONE_MYERROR; 181 182 root_dn = xmlDocGetRootElement ( doc ); 183if ( root_dn == NULL ) < 184 my_errno = DOC_EMPTY_MYERROR; 185 return (char*)(«»); 186 > 187 /* The XML document should have a root node that is called «LdapErrorMessages». 188 This node should have a child nodes have to identified as «message» and 189 these nodes should have in turn the id,msg properties. The id property is 190 a decimal integer value and the msg property have from a chars of string 191 that have linked with the id property. */ 192 if( xmlStrcmp ( root_dn->name ,»LdapErrorMessages» ) ) < 193 my_errno = DOC_INVALID_FORMAT_MYERRROR; 194 return (char*)strdup(«»); 195 > 196 197 if ( root_dn->children == NULL ) < 198 my_errno = DOC_HAVE_NOT_LDAP_MSGS_MYERROR; 199 return (char*)strdup(«»); 200 > 201 202 if ( root_dn->children ) < 203 if( !root_dn->children->next ) < 204 my_errno = DOC_HAVE_NOT_LDAP_MSGS_MYERROR; 205 return (char*)strdup(«»); 206 > 207 > 208 curr_dn = root_dn->children; 209while ( curr_dn ) < 210int id; 211 xmlAttrPtr properties; 212 if ( curr_dn->type != XML_ELEMENT_NODE ) < 213 curr_dn = curr_dn->next; 214continue; 215 > 216if( xmlStrcmp ( curr_dn->name ,»message» ) ) < 217 *line = look_line; 218 my_errno = DOC_INVALID_FORMAT_MYERRROR; 219return (char*)strdup(«»); 220 > 221if( !curr_dn->properties ) < 222 *line = look_line; 223 my_errno = DOC_INVALID_FORMAT_MYERRROR; 224return (char*)strdup(«»); 225 > 226 properties = curr_dn->properties; 227if( xmlStrcmp ( properties->name ,»id» ) ) < 228 *line = look_line; 229 my_errno = DOC_INVALID_FORMAT_MYERRROR; 230return (char*)strdup(«»); 231 > 232 ( curr_dn, properties->name )); 233 properties = properties->next; 234if( !properties || xmlStrcmp ( properties->name ,»msg» ) ) < 235 *line = look_line; 236 my_errno = DOC_INVALID_FORMAT_MYERRROR; 237return (char*)strdup(«»); 238 > 239if( check_id == id ) < 240return xmlGetProp ( curr_dn, properties->name ); 241 > 242 curr_dn = curr_dn->next; 243 look_line++; 244 > 245 246 *line = look_line; 247 total_line = *line + 1; 248 my_errno = DOC_NOT_FOUND_LDAP_MSG_MYERROR; 249 250return (char*)strdup(«»); 251 > 252 /*eof */ По сравнению с версией 0.1 текущая версия 0.2 имеет значительные отличия. Добавляется код, начиная с строки 42, код ошибки — переменная my_errno, которая будет содержать целочисленные значения макросов перечисленных в строках 44 -48 , являющиеся ошибками формата элемента . Значения представлены в шестнадцатеричной системе счисления. Значения присваиваются переменной my_errno только в функции ldap_message_get_by_id(), на которой строится весь второй тест. Макрос NONE_MYERROR с кодом 0x00 обозначает, что ошибки в формате элементов в текущем XML-документе не были найдены Макрос DOC_EMPTY_MYERROR с кодом 0x10 указывает, что в данном XML-документе корневой элемент не обнаружен, а указатель, который возвратит функция xmlDocGetRootElement() в строке 182 будет равен нулю. Макрос DOC_INVALID_FORMAT_MYERRROR с кодом 0x11 указывает, что неправильно введено имя элемента или его свойства. Так же, если не была соблюдена последовательность следования свойств id и msg или один из них не будет указан, той же переменной my_errno будет присвоен этот код ошибки. Проверки на этот макрос производится: В строках 192-195, проверяется имя корневого элемента с помощью функции xmlStrcmp(), которая производит сравнение имени элемента полученного в результате разбора и ожидаемого. Если они не совпадают функция xmlStrcmp() возвращает ненулевое значение. В обратном случае, она возвратит нулевое значение, когда сравниваемые проверяемые символьные строки будут эквивалентны. В строках 216-220, тем же самым способ проверяем, что текущий элемент имеет имя message. Если же в элементе отсутсвуют свойства как таковые или проверка в строке 234 показала, что отсутствует свойство msg или неправильно указано его имя, переменной my_errno будет присвоено значение макроса DOC_INVALID_FORMAT_MYERRROR. Макрос DOC_INVALID_FORMAT_MYERRROR с кодом 0x12 указывает, что элементы не найдены, т.е. XML-документ не содержит ни одного кода ошибки библиотеки LDAP. Макрос DOC_NOT_FOUND_LDAP_MSG_MYERROR с кодом 0x13 указывает, что такое сообщение с таким id, указанного в переменной check_id в строке 170, не было найдено. | ||
Вернуться в Доки-Токи | ||
Copyright © 2010 rjaan as Andrey Rjavskov(Rzhavskov) Источник |