powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Проект "ApolloSAX"
25 сообщений из 63, страница 1 из 3
Проект "ApolloSAX"
    #38131627
SOFT FOR YOU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброе время суток всем

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

Пара слов об XML
Я думаю ни для кого не секрет, что XML плотно засел в современные информационные технологии. Его используют везде. Раньше я видел только одно предназначение XML - файлы настроек. Однако сегодня его используют в Веб, тех же самых мессенджерах, форматы файлов стали активно строить на XML. Немалый вклад в укоренение XML на мой взгляд стала технология Office Open XML, разработанная компанией Microsoft. Да что тут говорить, даже старый добрый HTML всё чаще и чаще заменяют XHTML. Совсем недавно обнаружил, что мой любимый "MindManager" тоже использует OOXML для своих файлов.

Пара слов обо мне
Программирую 14 лет. Люблю Delphi, неплохо знаю ассемблер x86, С/C++ тоже немного знаю (2.5 года официальной работы). Моя стихия - это оптимизации и удобный пользовательский интерфейс (тоже в некотором роде оптимизация - эффективности деятельности пользователя). Имею опыт генерации и распарсивания XML/HTML с очень хорошей скоростью. Тестировали с разными парсерами - получилось что-то между pugiXML и Expat, ближе к pugi. С другой стороны парсер понимал только Ansi и Utf8, не мог обрабатывать CDATA. В общем достаточно неуниверсальный парсер

Зачем ещё один парсер
Я думаю многие со мной согласятся. Несмотря на обилие достойных SAX и DOM парсеров, вопрос идентификации элементов/атрибутов, производительности, валидации, удобства использования - по прежнему остаётся актуальным. Проект который я предлагаю сделать - максимально упрощает жизнь вышеописанную рутинную работу

В чём состоит идея
Идея проста и гениальна. В большинстве случаев, распарсивая сложный (или простой) XML, мы уже разумеется знаем его строение. По умному - если предполагается обмениваться XML, то к нему существует XSD-схема (или схема в другом формате). Для идентификации имён элементов и атрибутов мы используем различные алгоритмы, чтобы в конечном счёте строку-идентификатор преобразовать к целочисленной константе. Достаточно эффективен поиск таких идентификаторов в хеш-таблице. Но это накладные расходы: хеш-функция, поиск в массиве, коллизии, перераспределение массива, надо делать сверки строк. Лично я для подобных случаев разработал более эффективный способ. Я написал утилиту, которая имеет на входе ряд идентификаторов, а на выходе выдаёт оптимальную функцию на ЯВУ, позволяющую однозначно определять идентификаторы. К примеру если я знаю, что элемент имеет одно из имён: "sheet","row","cell","data","value","style" - то код позволяющий мне определить элемент, будет выглядеть так. TAnsiPointer - это мой внутренний тип, хранящий длину строки и указатель на её символы. Мне очень нравится :)
Код: pascal
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.
const
  ID_UNKNOWN = 0;
  ID_CELL = 1;
  ID_DATA = 2;
  ID_ROW = 3;
  ID_SHEET = 4;
  ID_STYLE = 5;
  ID_VALUE = 6;

// generated by "Static Serializer"
function StrToSomeType(const S: TAnsiPointer): integer;
type
  __TAnsiPointerData = packed record
  case integer of
    0: (chars: array[0..high(integer)-1] of ansichar);
    1: (words: array[0..high(integer)div 2-1] of word);
    2: (dwords: array[0..high(integer)div 4-1] of dword);
  end;
begin
  Result := ID_UNKNOWN;

  { case sensitive, ansi }
  with __TAnsiPointerData(pointer(S.Data)^) do
  case (S.Length) of
   3: if (words[0]=$6F72)and(chars[2]='w') then Result := ID_ROW;
   4: case (dwords[0]) of
        $6C6C6563: Result := ID_CELL;
        $61746164: Result := ID_DATA;
      end;
   5: case (dwords[0]) of
        $65656873: if (chars[4]='t') then Result := ID_SHEET;
        $6C797473: if (chars[4]='e') then Result := ID_STYLE;
        $756C6176: if (chars[4]='e') then Result := ID_VALUE;
      end;
  end;
end;


Но суть не в том. Суть в том, что
1) идентифицировать элементы и атрибуты можно на лету
2) генерировать целочисленные константы можно на лету
3) вся эта информация уже хранится в XSD
4) существует возможность проводить валидацию документа и преобразовывать данные к нужному формату тоже на лету. Например если ожидается число - то преобразовывать к числу, если дата - то к дате. Если нужно оставить строкой - ради бога.
5) в конкретный момент парсинга ожидается ограниченно малое количество идентификаторов: элементов/атрибутов. Это позволяет существенно сократить время идентификации очередного элемента/атрибута
6) ну и наконец, как человек таки написавший парсер, заявлю. С точки зрения производительности намного эффективнее парсить очередной элемент, когда ты знаешь, как он может называться. Это значительно эффективнее поиска скобочек, кавычек, спец знаков и тд. ... с дальнейшей их универсальной идентификацией

В целом я предлагаю разработать утилиту, которая позволяет открывать XSD-схему (или другие), выставлять им специфичные опции (например какие элементы/атрибуты пропускать или к каким типам приводить), а на выходе получать специально заточенные модули-парсеры *.pas (для Delphi/FreePascal) или *.h/*.c (для C/C++). В модулях будут объявлены все необходимые константы, а так же главная функция-парсер. Для Delphi она будет реализована в виде дампов машинного кода для платформ x86, x64, ARM. Для С/C++ будет реализация на ЯВУ, но тоже мега запутанная. Главное в этих функциях не читабильность, а стабильная эффективная работа и компилируемость.

Парсер по сути состоит из двух частей: модуль-парсер, заточенный по конкретному XSD, и один универсальный модуль, в котором будут располагаться вспомогательные функции и так же рутина для потокового чтения. Под потоковым чтением я подразумеваю эффективное чтение данных например из файла (или того же zip) и автоматическое переконвертирование в случае необходимости в нужную кодировку

На кого ориентировано
1) кому нужно обрабатывать огромные XML файлы с максимально возможной скоростью
2) кому очень хочется комфортного распарсивания с автоматической валидацией
3) кто хочет сделать DOM-чтение по конкретному XSD

Кто нужен в проект
один-два фаната XML, которые знают все его правила, знают подходы для парсинга, знают несколько эффективных реализаций
один знаток XSD который способен адекватно и в полной мере консультировать по всем особенностям схем
один-два классных специалиста, способных написать просмотрщик XSD (с возможностью выставлять наши специфические опции), с приятным и удобным пользовательским интерфейсом
один-два скептика, которые захотят на конкретных примерах доказывать, что наш парсер работает медленно и некорректно
я буду заниматься генерацией pas/h-c и вспомогательным модулем

Разумеется всё на энтузиазме
Хотя если у кого то возникнет желание разработать проект на материальной основе - буду рад продать свою идею и свой труд на его реализацию
...
Рейтинг: 0 / 0
Проект "ApolloSAX"
    #38131752
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SOFT FOR YOUЛюблю DelphiДальше не читал.
...
Рейтинг: 0 / 0
Проект "ApolloSAX"
    #38131760
SOFT FOR YOU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не умеете ?
...
Рейтинг: 0 / 0
Проект "ApolloSAX"
    #38131765
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дя, я умею читать только до Delphi, дальше как отрубает.
...
Рейтинг: 0 / 0
Проект "ApolloSAX"
    #38131767
SOFT FOR YOU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
тогда Вы нам не подходите
низкий уровень профессиональных и социальных навыков
...
Рейтинг: 0 / 0
Проект "ApolloSAX"
    #38131772
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Искренне рад, что не подхожу.
...
Рейтинг: 0 / 0
Проект "ApolloSAX"
    #38131787
SOFT FOR YOU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мне кажется Вам следует описывать свои личные предпочтения, недостатки и впечатления в более подходящем месте. Можете завести блог, повысить активность в социальной сети, если Вас беспокоят фобии, расстройства, ощущения одиночества - обратитесь к соответствующим специалистам. Прошу больше не излагать Ваши ценные (но не в данном месте) мысли. Иначе буду вынужден обратиться к администрации с просьбой применить санкции злостному офтоперу и флудеру. Надеюсь мы друг друга поняли
...
Рейтинг: 0 / 0
Проект "ApolloSAX"
    #38131797
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вам был нужен скептик? Я как бы выразил скептицизм по поводу выбранного инструмента.

Просьбу удовлетворяю, больше писать не буду.
...
Рейтинг: 0 / 0
Проект "ApolloSAX"
    #38131806
SOFT FOR YOU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
рад, что с моей подачи на одного читающего человека стало больше
правда с логикой проблема. скептицизм должен быть связан с парсером, продемонстрирован конкретными примерами
могу порекомендовать почитать эти материалы: http://googletohelp.ru/?q=%D1%80%D0%B0%D0%B7%D0%B2%D0%B8%D1%82%D0%B8%D0%B5+%D0%BB%D0%BE%D0%B3%D0%B8%D0%BA%D0%B8+%D1%83+%D0%B4%D0%B5%D1%82%D0%B5%D0%B9
...
Рейтинг: 0 / 0
Проект "ApolloSAX"
    #38132585
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Говорю как человек немного понимающий в XML. И, который, работает со 100 мегабайтными файлами
1) Быстрее, чем SAX вы ничего не найдете (если мы говорим об XML, а не от текстовом файле). Выигрывать на 100 мегабайтах пару секунд - это не интересно.

2) Схема для чтения и записи, по большому счету не нужна. Всегда известно, что мы пишем строку, число или дату. Аналогично при чтении.

3) DOM тормозной, не спорю, но зато он позволяет осуществлять произвольный доступ к дереву

4) Возможно было бы интересно реализовать потоковую запись. Это было бы быстрее, чем DOM, но лично мне это не интересно. Я такое написал года три назад и месяц назад допилил его до использования юникода.

5) Писать валидатор по схеме - это тысячи человекочасов. Основное время уйдет на реализацию SOM или его аналога
...
Рейтинг: 0 / 0
Проект "ApolloSAX"
    #38132707
SOFT FOR YOU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_

спасибо за мнение

1) предложенный мной проект - это по сути и есть SAX. Вы почему то не учитываете время идентификации полученных строк, время перевода строк к интам/датам/булеанам/флоатам. Все эти вещи могут проходить автоматически и с очень высокой скоростью. Кроме бешеной скорости, объективный плюс - гигантское удобство. Можно вообще сделать так, чтобы element_start() приходил не просто со своим ID (обычно вообще указывается строка), а вместе с ID сразу же будет даваться заполненная структура согласно описанию в схеме (т.е. описание структуры генерирует утилита, а автоматическое её заполнение происходит в парсере)

2) для записи - да. А вот когда читаем - надо понимать, что мы можем встретить, в какой последовательности, какого рода данные будут указаны

3) я не против DOM. Кстати можно реализовать специфичный DOM-reader на основе этого SAX, где уже будут распарсеные элементы со всеми атрибутами

4) ну... меня вообще в данном случае интересует чтение. Мне представляет интерес удобно и быстро читать любые общедоступные XML. Будь то документы Excel например, или отчёты Oracle. Просто встречается в твоей жизни новый XML - и это добавляет сразу много рутины. А если схему через утилиту и получить парсер - миллион проблем просто исчезает

5) почему тысячи человекочасов ?
я согласен что это сложная задача. поэтому я её "перераспределил" на отдельного человека
но в целом почему валидация будет простой - объясню
в конкретный момент времени парсер будет знать, что ожидается например либо такой элемент, либо такой элемент, либо такой. Если ни одного из ожидаемых элементов не встретили - значит ошибка. Аналогично с атрибутами. В определённый момент времени будет ожидаться один из нескольких атрибутов. Если не встретился ни один из них - значит ошибка. Если встретился целочисленный атрибут, то нужно преобразовать символы к числу и заполнить определённое поле структуры. Если не получается преобразование - значит вызываем ошибку.
...
Рейтинг: 0 / 0
Проект "ApolloSAX"
    #38132844
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SOFT FOR YOUВы почему то не учитываете время идентификации полученных строк, время перевода строк к интам/датам/булеанам/флоатам. Все эти вещи могут проходить автоматически и с очень высокой скоростьюСкорость будет медленнее. Пример
Код: xml
1.
<test int="2" bool="true" dt="2013-01-31T16:15"/>


Стандартный вариант

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
function GetAttribute(const AName: string): string;
begin
 ...............
end;

StrToInt(GetAttribute('int'));
StrToBool(GetAttribute('bool'));
StrToDateTime(GetAttribute('dt'));

т.е. программа знает какой тип она получает.

Ваш вариант
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
function GetAttribute(const AName: string): Variant;
var
  LVarType: TVarType;
  LStr: string;
begin
  LVarType := FindVarTypeInXSD(AName);
  LStr := ReadAttrribute;
  Result := VarAsType(LStr, LVarType);
end;

Стандартный вариант побыстрее будет.

Еще посмотрите реализацию TField.AsXXX
SOFT FOR YOUа вместе с ID сразу же будет даваться заполненная структураКоторая будет разной для каждого элемента.

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

Вообще говоря Ваша идея у меня реализована. Правда не на SAX, а на DOM. У меня XML, на основании схемы, трансформируется в набор датасетов. При этом
1) Схема должна быть довольно жесткого формата
2) Каждый модуль все равно работает с конкретной схемой и сама технология просто инкапсулирует работу с DOM, выставляя наружу работу с датасетами
SOFT FOR YOUА вот когда читаем - надо понимать, что мы можем встретить, в какой последовательности, какого рода данные будут указаныЭто учитывается не в момент чтения, а в момент написания кода читателя, путем анализа программистом схемы. Максимум, что делается - это произвидится валидация
SOFT FOR YOUспецифичный DOM-readerЕсли только reader. Но все равно не имеет смысла. Вам придется все дерево хранить в памяти. Память будет жраться в огромных количествах, что и дает стандартный DOM. Да, за счет Read-Only можно будет, что-то заоптимизировать, но тогда лучше SAX с памятью. только под текущую запись

SOFT FOR YOU5) почему тысячи человекочасов ?Вы знакомы с XSD схемами? С наследованием, расширением, ограничением типов? С импортом пространства имен? Со ссылками и группами? Я парсил XSD стандартным SOM - даже в таком варианте ньюансов миллион, а Вы предлагаете писать свой SOM
SOFT FOR YOUя согласен что это сложная задача. поэтому я её "перераспределил" на отдельного человекаВот он и потратит на нее то время, что я написал
SOFT FOR YOUв конкретный момент времени парсер будет знать, что ожидается например либо такой элемент, либо такой элемент, либо такой.А если ожидаемых будет не три, а 10? 50? Пару <xsd:sequence>, <xsd:group>, <xsd:choice> и разбавить minOccurs = 0 и maxOccurs > 1
SOFT FOR YOUВ определённый момент времени будет ожидаться один из нескольких атрибутов.С атрибутами проще
SOFT FOR YOUЕсли не встретился ни один из них - значит ошибка.use="optional"
SOFT FOR YOUЕсли встретился целочисленный атрибут, то нужно преобразовать символы к числу и заполнить определённое поле структуры.Как все просто. Для справки
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
<restriction
  base = QName 
  id = ID 
  {any attributes with non-schema Namespace}...>
Content: (annotation?, (simpleType?, (minExclusive | minInclusive | 
maxExclusive | maxInclusive | totalDigits |fractionDigits | length | 
minLength | maxLength | enumeration | whiteSpace | pattern)*)?, 
((attribute | attributeGroup)*, anyAttribute?))
</restriction>

А <xsd:union> как будем обрабатывать?
SOFT FOR YOUЕсли не получается преобразование - значит вызываем ошибку.А если получается?
Код: xml
1.
2.
3.
4.
5.
<xsd:restriction base="xsd:integer">
  <xs:enumeration value="0"/>
  <xs:enumeration value="5"/>
  <xs:enumeration value="13"/>
</xsd:integer>

К чему будем преобразовывать? А если так?
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
<xs:attribute name="fontsize">
  <xs:simpleType>
    <xs:union memberTypes="fontbynumber fontbystringname" />
  </xs:simpleType>
</xs:attribute>

<xs:simpleType name="fontbynumber">
  <xs:restriction base="xs:positiveInteger">
    <xs:maxInclusive value="72"/>
  </xs:restriction>
</xs:simpleType>

<xs:simpleType name="fontbystringname">
  <xs:restriction base="xs:string">
    <xs:enumeration value="small"/>
    <xs:enumeration value="medium"/>
    <xs:enumeration value="large"/>
  </xs:restriction>
</xs:simpleType>
...
Рейтинг: 0 / 0
Проект "ApolloSAX"
    #38132872
mage.lan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SOFT FOR YOU,

я до дельфи даже не дочитал, зря вы на человека наехали, ей богу.

а доитал я до этого: "что XML плотно засел в современные информационные технологии"

современные тенденции как бы уже давно текут в обратном направлении.
хмл - монстроидальное уродство, от которого в том же вебе все отказываются в угоду JSON и прочих легковесных форматов.
конфиги все современные программы либо в формате микрософтовских ini имеют или опять в JSON
Только ту фигню которую успели наплодить 10 лет назад, фанаты продолжают радостно поддерживать.

Вы со свом дельфи застряли в прошлом веке. Это не наезд, просто повод задуматься.
...
Рейтинг: 0 / 0
Проект "ApolloSAX"
    #38132877
SOFT FOR YOU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_Скорость будет медленнее. Пример
я очень рад что встретил достойного опытного собеседника !
я на все Ваши вопросы отвечу, только пожалуйста, приведите пример хотя бы из 3-4 элементов, включающий объявление и главный элемент. Я схематично и псевдокодом объясню алгоритм парсинга, Вы поймёте, почему он очень эффективный. Пока Вы немного не так поняли мою идею. Но я с удовольствием объясню !
...
Рейтинг: 0 / 0
Проект "ApolloSAX"
    #38132882
SOFT FOR YOU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mage.lan

тебе не напомнить в каком ты разделе форума находишься, умник ? ))))))

я JSON конфиги не встречал
но ветка вообще не о JSON и Delphi если ты успел заметить. Ветка о конкретной идее, конкретном проекте. Поэтому прояви уважение, а критику XML оставь для соответствующих веток
...
Рейтинг: 0 / 0
Проект "ApolloSAX"
    #38132890
mage.lan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SOFT FOR YOU,

я на вас не наезжал и на "ты" не переходил. Задел, ок, значит мозг включается.
С XML/XSL я работаю поболее 10 лет, валидацией с помощью DTD занимался, когда XSD еще только в проекте был.

Если я вам говорю, что JSON приходит на смену XML, значит имею основания.
Хотите быть в теме, читайте девелоперские новости гугла, яндекса.
Посмотрите, как написаны конфиги у того же Sublime Text 2.

Мало того, даже SOAP сейчас на 2й план уходит.
Накушались все XML и он не выполняет тех функций которые от него хотят.
...
Рейтинг: 0 / 0
Проект "ApolloSAX"
    #38132893
SOFT FOR YOU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я не ставлю под вопрос твой авторитет в вопросе современных технологий обмена данными
я говорю, что подобным сообщениям не место в ветке
если бы я спрашивал "что вы думаете о XML и JSON" или "стоит ли программировать на Delphi" - я бы понял
но таких вопросов просто не стоит, вот и всё
...
Рейтинг: 0 / 0
Проект "ApolloSAX"
    #38132903
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mage.lanЕсли я вам говорю, что JSON приходит на смену XML ...


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

Есть ещё дофига применений, где JSON или что-то другое не сможешь заменить XML.

Кстати, о конфигурационных файлах -- вся старая добрая Java -братия сидит до сих пор на XML-е плотно, и не рыпается,
а в JSON-е я честно говоря вообще не видел ни разу конфига.

P.S. тем не менее к проекту пока отношусь скептически -- не понял, чего такого революционного в нём. Что не понятно -- нафига вообще там нужна какая-то хэш-таблица элементов ? SAX-у то например ...
...
Рейтинг: 0 / 0
Проект "ApolloSAX"
    #38132912
SOFT FOR YOU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivЧто не понятно -- нафига вообще там нужна какая-то хэш-таблица элементов ? SAX-у то например ...
ну всё очень просто
в калбеки от парсера приходят строки: имена элементов и атрибутов
для того чтобы их обрабатывать обычно строки приводят к какой-то ID-константе и по инту уже делают case (switch)
...
Рейтинг: 0 / 0
Проект "ApolloSAX"
    #38132913
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SOFT FOR YOUприведите пример хотя бы из 3-4 элементов, включающий объявление и главный элементЯ привел_Vasilisk_
Код: xml
1.
<test int="2" bool="true" dt="2013-01-31T16:15"/>

а также привел вариант чтения стандартными средствами.

Также учтите, что у элемента может быть сотня атрибутов из, которых, читающей программе нужно только два. Причем если их нет, то программа знает дефолтное значение. Хотя это можно (и наверное нужно) делать через атрибут default
...
Рейтинг: 0 / 0
Проект "ApolloSAX"
    #38132918
SOFT FOR YOU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_

не-не
это один элемент, у которого три атрибута
а надо хотя бы 4 элемента с разными атрибутами
так просто лучше будет продемонстрировать алгоритм
а потом на остальные вопросы отвечу
...
Рейтинг: 0 / 0
Проект "ApolloSAX"
    #38132920
Омномним
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SOFT FOR YOU,

у вас в названии ашыпка, правильно ApolloSUCKS

перед тем как что-то писать нужно придумать достойное название
...
Рейтинг: 0 / 0
Проект "ApolloSAX"
    #38132926
SOFT FOR YOU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Омномнимправильно ApolloSUCKS
по себе не судят
...
Рейтинг: 0 / 0
Проект "ApolloSAX"
    #38132980
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SOFT FOR YOUэто один элемент, у которого три атрибута
а надо хотя бы 4 элемента с разными атрибутамиА вот у меня именно такой XML. Ну вот более полный вариант
Код: xml
1.
2.
3.
4.
5.
6.
<root>
  <test int="2" bool="true" dt="2013-01-31T16:15" ........../>
  <test bool="true" int="3" dt="2013-01-31T17:15" ........./>
  <test int="2" bool="true" .........../>
  <test dt="2013-02-31T16:15" int="20" ........./>
</root>


Схема примерно такая
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
<xsd:element name="root">
  <xsd:complexType>
    <xsd:sequence>
      <xsd:element name="test" minOccurs="0" maxOccurs="unbound">
        <xsd:attribute name="int" type="xsd:integer"/>
        <xsd:attribute name="bool" type="xsd:boolean"/>
        <xsd:attribute name="dt" type="xsd:dateTime"/>
        <xsd:anyAttribute/>
      </xsd:element>
    </xsd:sequence>
  </xsd:complexType>
<xsd:element>

Покажите мне код, оптимальней, чем этот
Код: pascal
1.
2.
3.
StrToIntDef(GetAttribute('int'), 0);
StrToBoolDef(GetAttribute('bool'), False);
StrToDateTimeDef(GetAttribute('dt'), 0);
...
Рейтинг: 0 / 0
Проект "ApolloSAX"
    #38133001
SOFT FOR YOU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_

я отчаянно пытаюсь подобрать подходящий пример, чтобы продемонстрировать действие алгоритма :)
пожалуйста, придумайте побольше различающихся в имени элементов, лучше с иерархией, и несколько разных атрибутов
я продемонстрирую алгоритм, а потом сможем рассмотреть более сложные случаи, с необязательными или отличными элементами/атрибутами. Обещаю. Хотя когда я схематично покажу алгоритм, Вам сразу многое станет ясно !
...
Рейтинг: 0 / 0
25 сообщений из 63, страница 1 из 3
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Проект "ApolloSAX"
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]