|
Почему не отрабатывается XPath с MSXML2.DOMDocument60 на таком xml-файле?
|
|||
---|---|---|---|
#18+
Доброе время суток Пытаюсь разобрать xml данные листа Excel и почему-то не работает MSXML2.DOMDocument60 Код: vbnet 1. 2. 3. 4. 5. 6.
Если использовать MSXML2.DOMDocument или MSXML2.DOMDocument30, то узлы row отбираются, а если MSXML2.DOMDocument40 или MSXML2.DOMDocument60, то нет. Что нужно тогда указывать в строке запроса? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.01.2016, 05:05 |
|
Почему не отрабатывается XPath с MSXML2.DOMDocument60 на таком xml-файле?
|
|||
---|---|---|---|
#18+
Потому что в MS парсер к версии MSXML2.DOMDocument40 наконец-то привели к стандартам, которые, в частности, требуют указания в XPath префикса неймспейса, если таковой наличествует (а в данном случае он наличествует). Если неймспейс задан без префикса, то префикс назначаем сами. Неймспейсы для XPath задаются методом setProperty для свойства SelectionNamespaces . Выглядит это примерно так: Код: javascript 1. 2. 3. 4. 5. 6. 7.
... |
|||
:
Нравится:
Не нравится:
|
|||
21.01.2016, 06:31 |
|
Почему не отрабатывается XPath с MSXML2.DOMDocument60 на таком xml-файле?
|
|||
---|---|---|---|
#18+
Сон Веры Павловны , большое спасибо. Использовал ваше решение - заработало. Тогда, если можно, ещё вопрос. Я удалил данные о пространствах имён Код: xml 1.
, то есть корневой узел стал просто <worksheet> и использовал XPath запрос "/worksheet/sheetData/row", но MSXML2.DOMDocument60 возвращает пустую коллекцию узлов. Хотя на других xml-файлов, например таком Код: xml 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23.
XPath "/table/row" - исправно возвращает коллекцию узлов row. Что ещё может быть не так? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.01.2016, 11:27 |
|
Почему не отрабатывается XPath с MSXML2.DOMDocument60 на таком xml-файле?
|
|||
---|---|---|---|
#18+
anvg, приведите пример отредактированного файла, и кода, которым вы пытаетесь получить узлы. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.01.2016, 11:58 |
|
Почему не отрабатывается XPath с MSXML2.DOMDocument60 на таком xml-файле?
|
|||
---|---|---|---|
#18+
Сон Веры Павловны , большое спасибо за участие и потраченное время. Поставил XML-Notepad. Он сразу выбросил ошибку, что используется атрибут x14ac:dyDescent не объявленным пространством имён. Пошёл искать, где почитать про использование пространств имён. :) ... |
|||
:
Нравится:
Не нравится:
|
|||
21.01.2016, 14:00 |
|
Почему не отрабатывается XPath с MSXML2.DOMDocument60 на таком xml-файле?
|
|||
---|---|---|---|
#18+
ну так вернуть его и всё. выкинуть нужно было только xmlns='http://schemas.openxmlformats.org/spreadsheetml/2006/main' ... |
|||
:
Нравится:
Не нравится:
|
|||
21.01.2016, 14:19 |
|
Почему не отрабатывается XPath с MSXML2.DOMDocument60 на таком xml-файле?
|
|||
---|---|---|---|
#18+
Доброе время суток. Antonariy , большое спасибо за ваш вариант. Да, так работает. Пытаюсь разобраться с http://zajtcev.org/docs/w3c/ru/xml-names11-second-edition.html#defaulting]. Только вот не могу понять, как использовать это самое пространство имён по умолчанию с MSXML2.DOMDocument60. Ведь для чего-то оно объявляется и значит должно свободно использоваться. Предположил, что если в документе определены несколько таких пространств имён по умолчанию, то через Код: vbnet 1.
, как описано тут получу все данные по именам по умолчанию и, воспользовавшись кодом Сон Веры Павловны Код: vbnet 1.
задать префиксы имён, а затем использовать по назначению. Вот только pDoc.SelectNodes("//@xmlns") возвращает пустой список атрибутов :( И что в таком случае делать? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.01.2016, 06:51 |
|
Почему не отрабатывается XPath с MSXML2.DOMDocument60 на таком xml-файле?
|
|||
---|---|---|---|
#18+
xmlns="..." это, как говорят, не совсем атрибут. в коллекции Attributes он есть, но xpath с ним не работает. по всей видимости, только регэкспом выдергивать: xmlns=["'][^"']*["'] ... |
|||
:
Нравится:
Не нравится:
|
|||
22.01.2016, 13:29 |
|
Почему не отрабатывается XPath с MSXML2.DOMDocument60 на таком xml-файле?
|
|||
---|---|---|---|
#18+
Antonariyxmlns="..." это, как говорят, не совсем атрибут. в коллекции Attributes он есть, но xpath с ним не работает. по всей видимости, только регэкспом выдергивать: xmlns=["'][^"']*["'] Ничего подобного, для неймспейсов существует ось namespace::. Только и тут есть нюансы: 1. В XPath 2.0 эта ось deprecated. Ну да до XPath/XSLT 2.0 микрософтовским парсерам еще не скоро. 2. Неймспейсы на самом деле есть у каждого элемента. Даже если они в разметке явно объявлены только на корневом элементе, их наследуют все дочерние элементы, и запрос //namespace::* выдаст коллекцию узлов, размер которой равен x*y, где x - количество элементов в документе, у=количество объявленных неймспейсов корневого узла+1 (про +1 ниже). В реальности это число может быть больше, т.к. могут быть задану какие-то другие доп. неймспейсы ниже по иерархии. 3. Даже если в документе нигде нет ни одного объявления неймспейсов, все равно запрос //namespace::* выдаст коллекцию узлов, размер которой равен количеству элементов в документе, т.к. у этих элементов неймспейс по умолчанию - xmlns:xml=" http://www.w3.org/XML/1998/namespace" Если надо с помощью XPath выбрать объявления неймспейсов какого-то одного узла - например, корневого - то тут подойдет такой XPath: /*/namespace::* ... |
|||
:
Нравится:
Не нравится:
|
|||
22.01.2016, 15:48 |
|
Почему не отрабатывается XPath с MSXML2.DOMDocument60 на таком xml-файле?
|
|||
---|---|---|---|
#18+
Сон Веры ПавловныНичего подобного, для неймспейсов существует ось namespace::.не юзал ее, как-то вообще мимо внимания прошла. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.01.2016, 16:35 |
|
|
start [/forum/topic.php?fid=14&msg=39153322&tid=1332132]: |
0ms |
get settings: |
8ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
177ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
39ms |
get tp. blocked users: |
1ms |
others: | 320ms |
total: | 574ms |
0 / 0 |