| 
 | 
| 
 
Почему не отрабатывается 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:  | 
    10ms | 
get forum list:  | 
    13ms | 
check forum access:  | 
    4ms | 
check topic access:  | 
    4ms | 
track hit:  | 
    58ms | 
get topic data:  | 
    10ms | 
get forum data:  | 
    3ms | 
get page messages:  | 
    50ms | 
get tp. blocked users:  | 
    1ms | 
| others: | 237ms | 
| total: | 390ms | 

| 0 / 0 | 

На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даете согласие с использованием данных технологий.