XPath по IXMLDOMNodePtr
От: Stalker_DA Россия  
Дата: 18.05.04 09:03
Оценка:
Hi All!

Предположим, есть такой XML файл:

<MAIN>
<NODE></NODE>
<NODE></NODE>
...
</MAIN>


У меня есть указатель на один из <NODE> — IXMLDOMNodePtr, полученный каким-либо образом.

Прблема состоит в том — как по этому указателю определить какой это NODE — 1-й или 2-й ?
Т.е. мне нужно построить для него XPath вроде /MAIN/NODE[2] например.

Еще раз отмечу, что у меня есть только указатель IXMLDOMNodePtr на этот нод, никаких специальных
атрибутов у нода нет, его typedValue тоже не рассматриваются.
Re: XPath по IXMLDOMNodePtr
От: Lloyd Россия  
Дата: 18.05.04 09:49
Оценка:
Здравствуйте, Stalker_DA, Вы писали:

S_D>У меня есть указатель на один из <NODE> — IXMLDOMNodePtr, полученный каким-либо образом.


S_D>Прблема состоит в том — как по этому указателю определить какой это NODE — 1-й или 2-й ?

S_D>Т.е. мне нужно построить для него XPath вроде /MAIN/NODE[2] например.

S_D>Еще раз отмечу, что у меня есть только указатель IXMLDOMNodePtr на этот нод, никаких специальных

S_D>атрибутов у нода нет, его typedValue тоже не рассматриваются.

А у нода разве нет метода selectSingleNode(string xpath)?

Если есть, то можно попробовать selectSingleNode("count(./preceding-sibling::*)") и получишь кол-во своих "старших братьев".
... << RSDN@Home 1.1.3 stable >>
Re[2]: XPath по IXMLDOMNodePtr
От: Stalker_DA Россия  
Дата: 18.05.04 10:01
Оценка:
Здравствуйте, Lloyd, Вы писали:

L>Здравствуйте, Stalker_DA, Вы писали:


S_D>>У меня есть указатель на один из <NODE> — IXMLDOMNodePtr, полученный каким-либо образом.


S_D>>Прблема состоит в том — как по этому указателю определить какой это NODE — 1-й или 2-й ?

S_D>>Т.е. мне нужно построить для него XPath вроде /MAIN/NODE[2] например.

S_D>>Еще раз отмечу, что у меня есть только указатель IXMLDOMNodePtr на этот нод, никаких специальных

S_D>>атрибутов у нода нет, его typedValue тоже не рассматриваются.

L>А у нода разве нет метода selectSingleNode(string xpath)?


L>Если есть, то можно попробовать selectSingleNode("count(./preceding-sibling::*)") и получишь кол-во своих "старших братьев".


Можно, только при этом я получу все вышестоящие (на одном уровне с моим) ноды. А мне нужно выбрать только те, baseName которых
совпадает с моим. Я понимаю что можно конечно сделать такую выборку и потом сравнивать имена ... такое решение у меня было с
самого начала, хотелось бы покрасивее.
Re[3]: XPath по IXMLDOMNodePtr
От: Lloyd Россия  
Дата: 18.05.04 10:53
Оценка:
Здравствуйте, Stalker_DA, Вы писали:

S_D>Можно, только при этом я получу все вышестоящие (на одном уровне с моим) ноды. А мне нужно выбрать только те, baseName которых

S_D>совпадает с моим. Я понимаю что можно конечно сделать такую выборку и потом сравнивать имена ... такое решение у меня было с
S_D>самого начала, хотелось бы покрасивее.

Упс, извини, недосмотрел.


count(./preceding-sibling::NODE)
Re[4]: XPath по IXMLDOMNodePtr
От: Stalker_DA Россия  
Дата: 18.05.04 12:30
Оценка:
Здравствуйте, Lloyd, Вы писали:

L>Здравствуйте, Stalker_DA, Вы писали:


S_D>>Можно, только при этом я получу все вышестоящие (на одном уровне с моим) ноды. А мне нужно выбрать только те, baseName которых

S_D>>совпадает с моим. Я понимаю что можно конечно сделать такую выборку и потом сравнивать имена ... такое решение у меня было с
S_D>>самого начала, хотелось бы покрасивее.

L>Упс, извини, недосмотрел.



L>
L>count(./preceding-sibling::NODE)
L>


Спасибо, это подходит. Но вопрос все равно есть, а можно ли не указывать явно имя "NODE"? Т.е. сделать так
чтобы запрос был универсальным. Насколько я понимаю, нужно написать что нибудь вроде

(./preceding-sibling::*[name()= <а вот чему?> ]


Т.е. как получить baseName данного нода, от которого я начинаю поиск?
Re[5]: XPath по IXMLDOMNodePtr
От: Lloyd Россия  
Дата: 18.05.04 13:24
Оценка:
Здравствуйте, Stalker_DA, Вы писали:

L>>
L>>count(./preceding-sibling::NODE)
L>>


S_D>Спасибо, это подходит. Но вопрос все равно есть, а можно ли не указывать явно имя "NODE"? Т.е. сделать так

S_D>чтобы запрос был универсальным. Насколько я понимаю, нужно написать что нибудь вроде

S_D>
S_D>(./preceding-sibling::*[name()= <а вот чему?> ]
S_D>


S_D>Т.е. как получить baseName данного нода, от которого я начинаю поиск?


А если так:

./preceding-sibling::*[name()= name(.)]
Re[6]: XPath по IXMLDOMNodePtr
От: Stalker_DA Россия  
Дата: 18.05.04 13:29
Оценка:
Здравствуйте, Lloyd, Вы писали:

L>Здравствуйте, Stalker_DA, Вы писали:


L>>>
L>>>count(./preceding-sibling::NODE)
L>>>


S_D>>Спасибо, это подходит. Но вопрос все равно есть, а можно ли не указывать явно имя "NODE"? Т.е. сделать так

S_D>>чтобы запрос был универсальным. Насколько я понимаю, нужно написать что нибудь вроде

S_D>>
S_D>>(./preceding-sibling::*[name()= <а вот чему?> ]
S_D>>


S_D>>Т.е. как получить baseName данного нода, от которого я начинаю поиск?


L>А если так:


L>
L>./preceding-sibling::*[name()= name(.)]
L>


Нет — так не прокатывает, я так уже пробовал, это все равно что просто * указать — все предыдущие ноды этого уровня
возвращаются.
Re[7]: XPath по IXMLDOMNodePtr
От: Lloyd Россия  
Дата: 18.05.04 13:39
Оценка:
Здравствуйте, Stalker_DA, Вы писали:

S_D>Нет — так не прокатывает, я так уже пробовал, это все равно что просто * указать — все предыдущие ноды этого уровня

S_D>возвращаются.

Ну тады ой. Формируй строку xpath-а и вызывай.
Re[8]: XPath по IXMLDOMNodePtr
От: Stalker_DA Россия  
Дата: 18.05.04 13:45
Оценка:
Здравствуйте, Lloyd, Вы писали:

L>Здравствуйте, Stalker_DA, Вы писали:


S_D>>Нет — так не прокатывает, я так уже пробовал, это все равно что просто * указать — все предыдущие ноды этого уровня

S_D>>возвращаются.

L>Ну тады ой. Формируй строку xpath-а и вызывай.


Ну так и делаю, все работает вроде.
Ладно, наверное действительно не стоит на этом загоняться
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.