Я пытаюсь определить все узлы в дереве, ведущие к определенному узлу.
Я пытаюсь выполнить это либо с помощью MSSQL XML (2005), либо с помощью Microsoft.XMLDOM в классическом ASP.
Я знаю логику с XPATH, но SQL Server не поддерживает ось ancestor-or-self
, а XMLDOM, кажется, задыхается от нотации ::
.
xpath, который работает, когда я тестирую его в тестере XPATH,
//static[@id=6]/ancestor-or-self::static
мой XML (рекурсивно сгенерированный на сервере sql) выглядит так
<root>
<static id="1" title="some title 1" />
<static id="2" title="some title 2">
<children>
<static id="3" title="some title 3" />
<static id="4" title="some title 4">
<children>
<static id="5" title="some title 5" />
<static id="6" title="some title 6" />
</children>
</static>
</children>
</static>
<static id="7" title="some title 7" />
</root>
XPATH должен выбирать узлы с идентификатором (2,4,6) в любом порядке, поэтому я могу добавить атрибут ко всем из них..
Это для системы меню, где я знаю только выбранный лист, и мне нужно пометить как hilit все узлы, ведущие к нему.
Я был бы признателен за любую помощь в преодолении удушья XMLDOM (запуск xml.documentElement.selectNodes("//static[@id=6]/ancestor-or-self::static")
приводит к следующей ошибке: Expected token 'eof' found ':'. //static[@id=6]/ancestor-or-self-->:<--:static
)
или с поиском альтернативного решения. Возможно, найти все узлы, которые содержат определенный узел (с id = 6) на любой глубине.