J'essaye d'identifier tous les nœuds dans un arbre qui mènent à un nœud spécifique.alternative à l'ancêtre-ou-soi (ou sélectionnez tous les nœuds dans l'arborescence avec un nœud enfant spécifique)
J'essaye d'accomplir ceci par MSSQL XML (2005) ou par le Microsoft.XMLDOM dans l'ASP classique.
Je sais la logique avec XPath mais SQL Server ne prend pas en charge l'axe ancestor-or-self
et XMLDOM semble étouffer la notation ::
..
Le XPath qui fonctionne quand je le tester dans les testeurs XPATH est
//static[@id=6]/ancestor-or-self::static
mon XML (généré récursive dans le serveur SQL) ressemble
<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 doit sélectionner des noeuds avec id (2, 4,6) dans n'importe quel ordre, donc je peux ajouter un attribut à tous.
Ceci est pour un système de menu, où je ne connais que la feuille sélectionnée, et doit marquer comme hilited tous les nœuds menant à il ..
J'apprécierait toute aide soit surmonter XMLDOM étouffement (en cours d'exécution xml.documentElement.selectNodes("//static[@id=6]/ancestor-or-self::static")
produit l'erreur suivante: Expected token 'eof' found ':'. //static[@id=6]/ancestor-or-self-->:<--:static
)
ou à trouver une solution alternative. Peut-être trouver tous les nœuds qui contiennent le nœud spécifique (avec id = 6) à n'importe quelle profondeur ..
solution alternative en termes de quoi? un nouveau parseur, un xpath différent, ou un langage de programmation différent? –
@Jimmy, toute alternative, à l'exception des technologies changeantes, puisque le projet est déjà en cours. –
Quelle version de XMLDocument utilisez-vous dans la partie ASP classique de l'implémentation? –