|
ВычислитьВыражение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". а вот когда у документа этого пространства имен нет - у меня не получилось
|
|||
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) Рад что поднял тебе настроение.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |