Имя: Пароль:
1C
1С v8
ВычислитьВыражениеXPath по XML c разными пространствами имён
0 DrWatson
 
10.01.17
11:59
Имею XML из графической схемы:
+ Code
<FlowchartContextType xmlns="http://v8.1c.ru/8.2/data/graphscheme"; xmlns:xs="http://www.w3.org/2001/XMLSchema"; xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; xsi:type="FlowchartContextType">
    ...
    <item>
        <itemCode>ВыборВарианта1</itemCode>
        ...
        <transition>
            <name>Вариант3</name>
            <description>
                <item xmlns="http://v8.1c.ru/8.1/data/core">;
                    <lang>#</lang>
                    <content>Вариант1</content>
                </item>
                <item xmlns="http://v8.1c.ru/8.1/data/core">;
                    <lang>en</lang>
                    <content>Transition1</content>
                </item>
            </description>
            <backColor>auto</backColor>
        </transition>
    </item>
</FlowchartContextType>
- Code

Нашел элемент <transition>
        РазыменовательЭталон = ДокументDOMЭталон.СоздатьРазыменовательПИ();
        Результат = ДокументDOMЭталон.ВычислитьВыражениеXPath("./xmlns:item[xmlns:itemCode='ВыборВарианта1']/xmlns:transition", ДокументDOMЭталон, РазыменовательЭталон, ТипРезультатаDOMXPath.ПервыйУпорядоченныйУзел);
        ЭлементDOMВыбор = Результат.ПолучитьСледующий();

Дальше хочу у этого элемента найти все /description/item/content. Но так не работает
        Результат = ДокументDOMЭталон.ВычислитьВыражениеXPath("./xmlns:description/xmlns:item/xmlns:content", ЭлементDOMВариант, РазыменовательЭталон, ТипРезультатаDOMXPath.НеупорядоченныйИтераторУзлов);
Подозреваю, что не работает из-за своего пространства имен у элементов <item xmlns="http://v8.1c.ru/8.1/data/core">;.

Как найти желаемое одним выражением поиска?
1 Fragster
 
гуру
10.01.17
12:03
никак :(
и самая печалька что с пустым пространством имен тоже не работает :(
2 Serginio1
 
10.01.17
12:09
3 DrWatson
 
10.01.17
12:10
(1) Почему никак? Вон у меня item/transition без пространства имён и такое выражение поиска его находит:
"./xmlns:item/xmlns:transition"
4 DrWatson
 
10.01.17
12:15
(2) Предлагаешь использовать COMОбъект?
У меня первый поиск на стандартных объектах работает. Хочется и второй так же.
5 Fragster
 
гуру
10.01.17
12:18
(3) они у тебя с пространством имен документа, т.е. "http://v8.1c.ru/8.2/data/graphscheme&quot;. а вот когда у документа этого пространства имен нет - у меня не получилось
6 DrWatson
 
10.01.17
12:25
(5) ок, понял. Хорошо что у меня пространства имён заданы.

Может Разыменователь можно как-то сконфигурировать, чтобы он понимал и "http://v8.1c.ru/8.2/data/graphscheme"; и "http://v8.1c.ru/8.1/data/core";?
Кстати, по-отдельности он ищет. Т.е. сначала найти до <description>
            Результат = ДокументDOMЭталон.ВычислитьВыражениеXPath("./xmlns:description", ЭлементDOMВариант, РазыменовательЭталон, ТипРезультатаDOMXPath.НеупорядоченныйИтераторУзлов);
            ЭлементDOMНаименованиеВарианта = Результат.ПолучитьСледующий();
, а потом сделать
            Разыменовательv8core = ДокументDOMЭталон.СоздатьРазыменовательПИ("xmlns", "http://v8.1c.ru/8.1/data/core";);
            Результат = ДокументDOMЭталон.ВычислитьВыражениеXPath("./xmlns:item/xmlns:content", ЭлементDOMНаименованиеВарианта, Разыменовательv8core, ТипРезультатаDOMXPath.НеупорядоченныйИтераторУзлов);
            СвойствоЭлементаDOM = Результат.ПолучитьСледующий();

А можно ли сделать это в одном запросе?
7 Serginio1
 
10.01.17
12:43
(4) Я к тому, что если нет стандартных способов, то можешь использовать всю мощь .Net классов

http://ru.stackoverflow.com/questions/527763/%d0%9a%d0%b0%d0%ba-%d0%b2%d1%8b%d0%b7%d0%b2%d0%b0%d1%82%d1%8c-%d0%bc%d0%b5%d1%82%d0%be%d0%b4-%d0%b8%d0%b7-c-%d0%b2-1%d0%a1/527802#527802
8 sapphire
 
10.01.17
13:58
(7)  мощь .Net классов
звучит гордо. Да.
*чо та ржу*
9 Serginio1
 
10.01.17
14:23
(8) Рад что поднял тебе настроение.
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн