поиск по XML со схемой
От: sbay  
Дата: 12.08.03 07:40
Оценка:
Имеется XML файл, построенный в соответствии с XSD схемой. Расположение элементов в XML детерминировано схемой,
т.е. в ней определены не только типы, но и структура документа.
Не выполняется поиск (selectSingleNode и т.п.) по имени узла — с XPath типа "*" и другим структурным признакам проходит на ура.
Если ссылку на схему убрать из XML все работает.
Прописывал и property SelectionLanguage и SelectionNamespace — безрезультатно.
Стоит убрать xmlns из корневого узла и все работает!
Как это ?
Re: поиск по XML со схемой
От: dimzon Россия http://dimzon541.narod.ru
Дата: 19.08.03 16:18
Оценка:
Здравствуйте, sbay, Вы писали:

S>Имеется XML файл, построенный в соответствии с XSD схемой. Расположение элементов в XML детерминировано схемой,

S>т.е. в ней определены не только типы, но и структура документа.
S>Не выполняется поиск (selectSingleNode и т.п.) по имени узла — с XPath типа "*" и другим структурным признакам проходит на ура.
S>Если ссылку на схему убрать из XML все работает.
S>Прописывал и property SelectionLanguage и SelectionNamespace — безрезультатно.
S>Стоит убрать xmlns из корневого узла и все работает!
S>Как это ?
Гы!
Кажись знаю этот глюк — попробуй сделать схему с префиксом
... << RSDN@Home 1.1 beta 1 >>
Re: поиск по XML со схемой
От: Аноним  
Дата: 20.08.03 05:25
Оценка:
Здравствуйте, sbay, Вы писали:

S>Стоит убрать xmlns из корневого узла и все работает!


Ты убрал ссылку не на схему, а на пространство имен.

<A xmlns="urn:some-namespace"><x:B xmlns:x="urn:another-namespace"/></A>


Здесь элемент A квалифицирован ПИ urn:some-namespace, а элемент B — ПИ urn:another-namespace.

Квалификация является частью именования элемента, поэтому поиск //B в таком документе ничего не найдет (это поиск неквалифицированного имени).

Сначала нужно связать какой-нибудь префикс с нужным ПИ вызовом setProperty:

oDomDocument.setProperty(
    "SelectionNamespaces", 
    "xmlns:ns='urn:another-namespace'");


А потом искать //ns:B.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.