Модераторы: diadiavova
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> XQuery, ноды с дефисом, не удается распарсить xml 
V
    Опции темы
bsa
Дата 6.7.2009, 23:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: нет
Всего: 196



Есть некий XML файл. У него часть элементов в своих названиях содержат дефисы:
Код
<mime-info ...>
   <mime-type ...>
     <comment>some text</comment>
   ...
   </mime-type>
   <mime-type ...>
     <comment>some text2</comment>
   ...
   </mime-type>
   ...
</mime-info>
Попытка получить хотя бы содержимое mime-info с помощью:
Код
doc('test.xml')/mime-info
Приводит к пустому результату. При этом если взять файл с нодами без дефисов, то проблем не будет. Все попытки найти что-нибудь про проблему с дефисом не увенчались успехом.
Что нужно сделать, чтобы распарсить этот файл?

В итоге, мне нужно, чтобы получился следующий файл:
Код
MACRO("TEXT", "some text")
MACRO("TEXT", "some text2")
...
Так что если кому не лень...  smile 
PM   Вверх
jsa
Дата 7.7.2009, 06:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 704
Регистрация: 19.1.2006
Где: Новосибирск

Репутация: 3
Всего: 20



Цитата(bsa @  7.7.2009,  04:42 Найти цитируемый пост)
doc('test.xml')/mime-info

а почему соб-но mime-info, по идее это вернет nodeList

какой процессор?



--------------------
Все мы, на перине с песней, строим небо на земле © Ю. Шевчук
PM MAIL ICQ   Вверх
bsa
Дата 7.7.2009, 10:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: нет
Всего: 196



Я XQuery вчера впервые увидел. Поэтому вопрос "почему mime-info" мне не очень понятен. Переименовать элементы XML не вариант.

В качестве "процессоров" (если я правильно понял, что это такое) я использовал xmlpatterns (QT) и saxon. Они ничего не выдают. А вот если везде убрать дефисы, то все работает так, как надо. Кстати, мне нужно, чтобы работало на xmlpatterns и без вариантов smile

Попробовал еще doc('test.xml')/*/* выдает все <comment> плюс другие элементы, которые не нужны. А если сделать doc('test.xml')/*/*/comment, то ничего не выдает.
PM   Вверх
jsa
Дата 7.7.2009, 11:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 704
Регистрация: 19.1.2006
Где: Новосибирск

Репутация: 3
Всего: 20



Цитата(bsa @  7.7.2009,  15:19 Найти цитируемый пост)
Поэтому вопрос "почему mime-info" мне не очень понятен

ну в принцепе
Код

doc('test.xml')/mime-info

должен вернуть список нод - никак не текст
как минимум должно быть
Код

doc('test.xml')/mime-info/mime-type/comment



--------------------
Все мы, на перине с песней, строим небо на земле © Ю. Шевчук
PM MAIL ICQ   Вверх
jsa
Дата 7.7.2009, 11:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 704
Регистрация: 19.1.2006
Где: Новосибирск

Репутация: 3
Всего: 20



Код

for $comment in doc('test.xml')/mime-info/mime-type/comment
return
  $comment/text()

примерно так, или даже так 
Код

for $comment in doc('test.xml')//comment
return
  $comment/text()



--------------------
Все мы, на перине с песней, строим небо на земле © Ю. Шевчук
PM MAIL ICQ   Вверх
bsa
Дата 7.7.2009, 12:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: нет
Всего: 196



Не работает. Выдает ошибку, что ожидается ( или { на второй строке.
Если убрать for и пр, а оставить только doc('test.xml')//comment, то результат опять будет пустым.
xml файл можно скачать тут
PM   Вверх
jsa
Дата 7.7.2009, 12:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 704
Регистрация: 19.1.2006
Где: Новосибирск

Репутация: 3
Всего: 20



можно еще так попробывать
Код

for $comment in doc('test.xml')//comment
return
 {$comment/text()}



--------------------
Все мы, на перине с песней, строим небо на земле © Ю. Шевчук
PM MAIL ICQ   Вверх
bsa
Дата 7.7.2009, 13:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: нет
Всего: 196



гы. похоже проблема в том, что у корневого элемента есть атрибут xmlns.
вылечилось так:
Код
for $x in doc('test.xml')//*:comment
    return data($x)


Это сообщение отредактировал(а) bsa - 7.7.2009, 13:32
PM   Вверх
bsa
Дата 7.7.2009, 14:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: нет
Всего: 196



Код
let $prefix := string("QT_TRANSLATE_NOOP(&quot;MimeType&quot;, &quot;")
let $suffix := concat("&quot;)", codepoints-to-string(10))
for $file in ("designer/Designer.mimetypes.xml", "cppeditor/CppEditor.mimetypes.xml")
    let $url := concat("http://qt.gitorious.org/qt-creator/qt-creator/blobs/raw/master/src/plugins/", $file)
    for $comment in doc($url)//*:comment
        return fn:concat($prefix, data($comment), $suffix)
Осталось теперь понять, как пихать просто текст вне цикла smile
PM   Вверх
jsa
Дата 8.7.2009, 08:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 704
Регистрация: 19.1.2006
Где: Новосибирск

Репутация: 3
Всего: 20



Цитата(bsa @  7.7.2009,  18:29 Найти цитируемый пост)
похоже проблема в том, что у корневого элемента есть атрибут xmlns

namespaces


--------------------
Все мы, на перине с песней, строим небо на земле © Ю. Шевчук
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "XML/XSLT"
diadiavova

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

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

Для ответов на часто задаваемые вопросы существует FAQ раздела. Новости можно публиковать в разделе новостей. Для статей так же есть специальный раздел

Желаем удачи в Вашем деле!


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, diadiavova.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | XML, XSL | Следующая тема »


 




[ Время генерации скрипта: 0.0948 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.