Форум программистов, компьютерный форум, киберфорум
Java
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.81/26: Рейтинг темы: голосов - 26, средняя оценка - 4.81
0 / 0 / 2
Регистрация: 30.06.2011
Сообщений: 173

Проблема получения атрибутов при парсинге xml

09.08.2011, 16:29. Показов 5129. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте.
Подскажите как разобраться xml документом.
У меня есть xsd-схема:
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
<?xml version = '1.0' encoding = 'utf-8'?>
<!--generated by turbo xml 2.4.1.100. conforms to w3c http://www.w3.org/2001/xmlschema-->
<xsd:schema xmlns:xsd = 'http://www.w3.org/2001/XMLSchema' elementFormDefault='qualified'>
 
  <xsd:element name = 'Form' type = 'tForm'/>
 
  <xsd:complexType name = 'tForm'>
    <xsd:attribute name = 'isModal' default = '0' type = 'xsd:boolean'/>
    <xsd:attribute name = 'isMaximized' default = '0' type = 'xsd:boolean'/>
    <xsd:attribute name = 'FocusTo' default = '' type = 'xsd:string'/>
    <xsd:attribute name = 'FormMode' default = '' type = 'enumFormModesList'/>
  </xsd:complexType>
</xsd:schema>
На используя её я пишу такой xml-документ
XML
1
2
3
<?xml version = '1.0' encoding = 'utf-8'?>
<Form isModal = '1' xmlns:xsi = 'http://www.w3.org/2001/XMLSchema-instance' xsi:noNamespaceSchemaLocation = 'FormML.xsd'>
</Form>
Как видно из схемы, у элемента 'Form' есть несколько атрибутов имеющих значения по умолчанию!!!

Как видно из xml-документа, - у элемента 'Form' я указал только один атрибут 'isModal'.

Насколько я понимаю, то xml-парсер должен автоматически добавлять атрибуты имеющие значения по умолчанию.
Т.е. имея данный xml-документ реализуем следующий код:
Java
1
2
3
4
5
6
7
  // ...
  factory = DocumentBuilderFactory.newInstance();
  builder = factory.newDocumentBuilder();
  doc = builder.parse(new File('file1.xml'));
  Element pEl;
  pEl = doc.getDocumentElement()
  NamedNodeMap Attribs = pEl.getAttributes();
После этого(как я думаю) в списке атрибутов 'Attribs' должны быть все атрибуты перечисленные в элементе xml-документа + те которые имеют значения по умолчанию.
НО как вы понимаете в этом списке присутствует только атрибут 'isModal'.

Подскажите, что надо добавить чтобы появились остальные атрибуты?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
09.08.2011, 16:29
Ответы с готовыми решениями:

Кириллица при парсинге XML
Приветствую всех! Пишу программу на Android. В программе закачиваю из интернета XML: &lt;trk&gt; &lt;trkseg&gt; &lt;rtept...

Ошибка при парсинге xml файла
Добрый день! При парсинге xml файла возникает ошибка, при чем возникает по середине процесса Часть файла разбирает, а по середине...

Получения списка элементов массива при парсинге JSON на XE4
Пытаюсь пропарсить JSON сам он такого вида: {&quot;text_unique&quot;:&quot;0.00&quot;,&quot;result_json&quot;:&quot;{\&quot;date_check\&quot;:\&quot;30.01.2015...

7
1 / 1 / 0
Регистрация: 15.02.2010
Сообщений: 311
09.08.2011, 21:55
Выяснить, какой парсер (билдер) используется, и посмотреть, что с ним можно сделать. Может, какое-нибудь свойство установить...
0
0 / 0 / 0
Регистрация: 06.07.2008
Сообщений: 22
10.08.2011, 10:37
Парсер не должен автоматически добавлять атрибуты, имеющие значения по умолчанию в какой-то там схеме. Он работает чисто с текстом входного xml-документа. Все, что написано к тексте - он преобразует в объектную структуру, а читать схему, проверять, чего 'не хватает' для полного соответствия, тем более дополнять входные данные - это не к нему.
0
0 / 0 / 2
Регистрация: 30.06.2011
Сообщений: 173
10.08.2011, 11:47  [ТС]
2serjis
Почему же тогда отлаживая приведенный выше код, мы можем добавив в список watch :

Attribs.item(0)

увидеть что уатрибута есть значение по умолчанию(правда оно = null)
0
0 / 0 / 0
Регистрация: 06.07.2008
Сообщений: 22
10.08.2011, 12:50
Подключи схему непосредственно к этому парсеру:

Java
1
2
3
4
5
            SchemaFactory sf = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
            Schema sch = sf.newSchema(new File('path/to/your/FormML.xsd'));
 
            DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
            factory.setSchema(sch);
, тогда парсер узнает, что надо подхватывать те атрибуты.
0
0 / 0 / 2
Регистрация: 30.06.2011
Сообщений: 173
10.08.2011, 17:12  [ТС]
УРА, - нашел:
Для переменной factory
Необходимо сделать следующее перед парсингом
Java
1
2
  factory.setNamespaceAware(true);
  factory.setValidating(true);
И тогда ВСЕ ПАШЕТ!!!
0
1 / 1 / 0
Регистрация: 15.02.2010
Сообщений: 311
10.08.2011, 20:19
С чем и поздравляем. Машина - дура. Что нажмешь, туда и поедет.
0
0 / 0 / 2
Регистрация: 30.06.2011
Сообщений: 173
11.08.2011, 09:26  [ТС]
Блин, от радости забыл написать главную фичу, - без которой собственно ничего работать не будет.
НЕОБХОДИМО установить библиотеку xerces.jar, - именно парсер этой фирмы позволяет делать такие вещи!!!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
11.08.2011, 09:26
Помогаю со студенческими работами здесь

Ошибка при парсинге XML
Досталась XML'ка с ошибкой, каждое случайно число строк (зависимость не искали), появляется какой то не понятный символ с кодом 0xc (так...

Ошибка при парсинге XML
День добрый имеется вот такой xml: &lt;?xml version=&quot;1.0&quot;?&gt; &lt;urlset xmlns=&quot;http://www.sitemaps.org/schemas/sitemap/0.9&quot;&gt; ...

Проблема при парсинге
Всем привет! Помогите, пожалуйста, новичку решить проблему. Пишу парсер магазина. Скрипт постранично вытаскивает ссылки лотов и далее...

неверная кодировка при парсинге xml
доброго времени суток сделал парсинг xml допустим есть 2 сайта domain.com - где лежит некий news.xml(данные зашифрованы Base64) и...

Вытащить атрибут при парсинге xml
День добрый, надо распарсить xml документ и все получилось, кроме одного: не могу вытащить атрибут у одного из тегов тег такой ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru