Nightmare
06-04-2007, 09:36
Salve.
Devo fare delle operazioni con un xml in modo da tirar fuori delle banali informazioni con l'ausilio del linguaggio xpath all'interno di una query in sqlserver
l'albero dell'xml in esempio (molto accorciato) è il seguente
<ContactFolders>
<ContactFolder Name="Altro">
<ContactItem InternalUser="4" />
<ContactItem>
<Name>Contatto esteno</Name>
<Surname>prova externaluser</Surname>
</ContactItem>
</ContactFolder>
<ContactFolder Name="Casa">
<ContactItem InternalUser="3" />
</ContactFolder>
</ContactFolders>
devo prendere dal seguente xml solamente i nodi ContactItem senza l'attributo InternalUser, ma mantenedoli però dentro i rispettivi nodi contactfolder
select @inputxml.query('/ContactFolders/ContactFolder/ContactItem[not(@InternalUser)]')
Questo funziona, ma mi sradica gli item perdendo i contactfolder
select @inputxml.query('/ContactFolders/ContactFolder/ContactItem[not(@InternalUser)]//parent::*')
Questo invece mi prende il primo genitore ma non la root, ma perde l'effetto della query. (li visualizza tutti)
inoltre in sqlserver la parola chiave ancestor non funziona, quindi non saprei come fare per prenderli tutti
Devo fare delle operazioni con un xml in modo da tirar fuori delle banali informazioni con l'ausilio del linguaggio xpath all'interno di una query in sqlserver
l'albero dell'xml in esempio (molto accorciato) è il seguente
<ContactFolders>
<ContactFolder Name="Altro">
<ContactItem InternalUser="4" />
<ContactItem>
<Name>Contatto esteno</Name>
<Surname>prova externaluser</Surname>
</ContactItem>
</ContactFolder>
<ContactFolder Name="Casa">
<ContactItem InternalUser="3" />
</ContactFolder>
</ContactFolders>
devo prendere dal seguente xml solamente i nodi ContactItem senza l'attributo InternalUser, ma mantenedoli però dentro i rispettivi nodi contactfolder
select @inputxml.query('/ContactFolders/ContactFolder/ContactItem[not(@InternalUser)]')
Questo funziona, ma mi sradica gli item perdendo i contactfolder
select @inputxml.query('/ContactFolders/ContactFolder/ContactItem[not(@InternalUser)]//parent::*')
Questo invece mi prende il primo genitore ma non la root, ma perde l'effetto della query. (li visualizza tutti)
inoltre in sqlserver la parola chiave ancestor non funziona, quindi non saprei come fare per prenderli tutti