Имеется XML файл, построенный в соответствии с XSD схемой. Расположение элементов в XML детерминировано схемой,
т.е. в ней определены не только типы, но и структура документа.
Не выполняется поиск (selectSingleNode и т.п.) по имени узла — с XPath типа "*" и другим структурным признакам проходит на ура.
Если ссылку на схему убрать из XML все работает.
Прописывал и property SelectionLanguage и SelectionNamespace — безрезультатно.
Стоит убрать xmlns из корневого узла и все работает!
Как это ?
Здравствуйте, sbay, Вы писали:
S>Имеется XML файл, построенный в соответствии с XSD схемой. Расположение элементов в XML детерминировано схемой,
S>т.е. в ней определены не только типы, но и структура документа.
S>Не выполняется поиск (selectSingleNode и т.п.) по имени узла — с XPath типа "*" и другим структурным признакам проходит на ура.
S>Если ссылку на схему убрать из XML все работает.
S>Прописывал и property SelectionLanguage и SelectionNamespace — безрезультатно.
S>Стоит убрать xmlns из корневого узла и все работает!
S>Как это ?
Гы!
Кажись знаю этот глюк — попробуй сделать схему с префиксом

... << RSDN@Home 1.1 beta 1 >>
Здравствуйте, 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.