Имя: Пароль:
1C
1С v8
XML и ВычислитьВыражениеXPath
0 Victor111
 
25.11.14
16:38
Добрый день.
Возник вопрос такой,как получить определенный узел документа XML чтоб перебрать атрибуты?
Если написать СтрокаЗапросаXPath="//*" тогда получаю все узлы,а если написать например СтрокаЗапросаXPath="//OTPR" то получаю Неопределено, хоть по идеи должен получить все узлы OTPR где бы они небыли..
    Результат = ДокументDOM.ВычислитьВыражениеXPath(СтрокаЗапросаXPath, ДокументDOM, Новый РазыменовательПространствИменDOM(ДокументDOM));
    Пока Истина Цикл
        Узел = Результат.ПолучитьСледующий();
        Если Узел = Неопределено Тогда
            Прервать;
        КонецЕсли;
        Для каждого ТекАтр из Узел.Атрибуты Цикл
            Сообщить("Атрибут: "+ТекАтр.ИмяУзла+", значение: <"+ТекАтр.ЗначениеУзла+">");
        КонецЦикла;
    КонецЦикла;
1 Лефмихалыч
 
25.11.14
17:10
(0) структур xml-то покажи. Как тебе помочь-то?
2 Victor111
 
25.11.14
21:07
(1)
<?xml version="1.0" encoding="utf-8"?>
<uz-rwc-doc xmlns="uz:rwc:document:1.2">
  <document-data>
    <uz-rwc-doc>
      <document-data>
        <uz-rwc-doc>
          <document-data>
            <uz-rwc-doc>
              <document-data>
                <uz-rwc-doc>
                  <document-data>
                    <OTPR admin_nazn="**>
                      <CLIENT account="*****" adress="****" bank="Аб &quot;****&quot;" city="***.... />
                      <CLIENT adress="***" kod="***" name="*** &quot;***&quot; *** &quot;****&quot;" type="*" />
                      <FROM_TO_LOC lang="de" name_from="***" name_to="****" />
                      <PL kod_plat="***" name_plat="** &quot;*** &quot;***;" type="0" />
                      <SHTEMPEL nom_sht="**" info_sht="***" />
                      <SHTEMPEL nom_sht="**" info_sht="*** &quot;***&quot;" />
                      <SHTEMPEL nom_sht="***" info_sht="****" />
                      <SPEC_COND code="**" />
                      <TEXT create_place="***" name_esr_otpr_real="**" />
                      <VAGON gruzp="***" kod_adm="**" kol_os="*" nomer="**" rod_vag="**" pr_sobst="*" use="**" ves_tary_arc="*">
                        <COLLECT_V kod_etsng="***" name_etsng="**" />
                      </VAGON>
                      <VAGON gruzp="**" kod_adm="**" kol_os="**" nomer="***" rod_vag="**" pr_sobst="**" use="**" ves_tary_arc="*">
                        <COLLECT_V kod_etsng="**" name_etsng="***" />
                      </VAGON>
                    </OTPR>
                  </document-data>
............

нужно получить все что лежит в <OTPR......OTPR/>
3 Victor111
 
25.11.14
21:12
(2) при использовании ДокументDOM все данные в виде дерева и мы можем сразу получать любую ветку насколько я понимаю
4 Лефмихалыч
 
25.11.14
21:25
СтрокаЗапросаXPath = ".//OTPR";
или еще
СтрокаЗапросаXPath = "/uz-rwc-doc/*/OTPR";
ну и точно прокатит топорный варянт
СтрокаЗапросаXPath = "/uz-rwc-doc/document-data/uz-rwc-doc/document-data/uz-rwc-doc/document-data/uz-rwc-doc/document-data/uz-rwc-doc/document-data/OTPR"
5 Victor111
 
25.11.14
22:33
(4) не срабатывает..
походу не видит или не воспринимает имена узлов "/uz-rwc-doc", чтоб прийти к нужному

Может у вас есть ссылка на ресурс где об этом методе можна почитать поподробней?
6 Jaap Vduul
 
26.11.14
00:00
(2)
Поскольку в xml определено пространство имён, то и запрос xpath должен указывать соответствующий этому пространству контекст(через префикс).
Т.е. в вашем случае будет так:
Разыменователь = Новый РазыменовательПространствИменDOM("ns", "uz:rwc:document:1.2");
Результат = ДокументDOM.ВычислитьВыражениеXPath(//ns:OTPR, ДокументDOM, Разыменователь);
7 Victor111
 
26.11.14
00:49
(6) Все получилось)
Спасиба!
Ошибка? Это не ошибка, это системная функция.