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

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

09.08.2011, 16:29. Показов 5102. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru