2009-08-03 2 views
1

Я использую Oxygen XML для работы с XML-файлом, который содержит ссылки на другие файлы XML. Эти другие файлы XML хранятся в подкаталоге каталога, который содержит основной файл XML.Получение местоположения XML-документа в XQuery

Downloads/ 
directory1/ 
    main.xml 
    subdirectory1/ 
    other1.xml 
    other2.xml 

Местоположение других файлов XML хранится как относительные ссылки в основном файле. Мой запрос выглядит как-то так:

for $df in /clldata/DiscussionForums/DiscussionForum 
    let $href := replace(data($df/@href),"\\","/") 
    for $p in doc($href) 
return $p 

Проблема я столкнулся является то, что кислород использует путь к файлу XQUERY в качестве основы для относительного пути, очевидно, в результате чего не удалось найти файл ошибки. Как я могу получить путь к XML-документу в моем запросе?

Сейчас я просто использую concat() для добавления правильного пути, но я хочу, чтобы это было легко использовать повторно.

ответ

1

Вам необходимо разрешить URI относительно URI основного XML-документа. В вашем случае, вы, вероятно, хотите сделать что-то вроде:

let $href = resolve-uri($d/@href, base-uri($d))

Здесь функция базового URI ($ d) получает абсолютный URI исходного документа, содержащего соответствующий узел DiscussionForum и решимость -ури разрешает новый URI относительно этого.

Это работает для меня, используя SAXON на плагине jedit XQuery. YMMV, я никогда не использовал Oxygen XML.

Смежные вопросы