Selezionare n nodi (XML)

mercoledì 19 luglio 2006 - 16.53

tyson69 Profilo | Newbie

ciao a tutti ho un file xml strutturato cosi:
<?xml version="1.0" standalone="yes"?>
<articoli>
<articolo>
<idarticolo>31</idarticolo>
<descrizione>Bla</descrizione>
<hits>1</hits>
<voto>1</voto>
</articolo>
...
</articoli>

vorrei estrarre n nodi che contengano gli hits + alti (tipo select top ..... in SQL)

come mi consigliate di procedere??

Un ringraziamento in anticipo!

tyson69 Profilo | Newbie

Ciao Coach e grazie come sempre per la risposta.

avevo pensato anche io a un array il problema è che potrebbero esserci centinaia di nodi....

stavo pensando invece di fare una cosa del genere:

Dim myDataSet As DataSet = New DataSet
Dim i As Integer
Dim drow As DataRow

myDataSet.Tables.Add("Table")

myDataSet.Tables("Table").Columns.Add("Top5")
myDataSet.Tables("Table").Columns("Top5").DataType = GetType(Int32)
myDataSet.Tables("Table").Columns("Top5").AutoIncrement = True
myDataSet.Tables("Table").Columns("Top5").AutoIncrementSeed = 0
myDataSet.Tables("Table").Columns("Top5").AutoIncrementStep = 1


myDataSet.Tables("Table").Columns.Add("idarticolo")
myDataSet.Tables("Table").Columns("idarticolo").DataType = GetType(String)
myDataSet.Tables("Table").Columns.Add("descrizione")
myDataSet.Tables("Table").Columns("descrizione").DataType = GetType(Double)
myDataSet.Tables("Table").Columns.Add("hits")
myDataSet.Tables("Table").Columns("hits").DataType = GetType(Double)

myDataSet.ReadXml(Server.MapPath("/xml/rate.xml"))


ora dovrei caricare l'xml ed a quel punto con un dataview applicare dei filtri ma non riesco a caricare l'xml....

Ti piace l'idea?

tyson69 Profilo | Newbie

ho fatto così
Dim myDataSet As DataSet = New DataSet
Dim drow As DataRow

myDataSet.Tables.Add("articoli")

'aggiungo una colonna contatore
myDataSet.Tables("articoli").Columns.Add("Top5")
myDataSet.Tables("articoli").Columns("Top5").DataType = GetType(Int32)
myDataSet.Tables("articoli").Columns("Top5").AutoIncrement = True
myDataSet.Tables("articoli").Columns("Top5").AutoIncrementSeed = 1
myDataSet.Tables("articoli").Columns("Top5").AutoIncrementStep = 1


myDataSet.Tables("articoli").Columns.Add("idarticolo")
myDataSet.Tables("articoli").Columns("idarticolo").DataType = GetType(Integer)
myDataSet.Tables("articoli").Columns.Add("descrizione")
myDataSet.Tables("articoli").Columns("descrizione").DataType = GetType(String)
myDataSet.Tables("articoli").Columns.Add("hits")
myDataSet.Tables("articoli").Columns("hits").DataType = GetType(Integer)
myDataSet.Tables("articoli").Columns.Add("voto")
myDataSet.Tables("articoli").Columns("voto").DataType = GetType(Integer)

myDataSet.ReadXml(Server.MapPath("/xml/rate.xml"))

dg.DataSource = myDataSet
dg.DataBind()

ma mi restituisce solo il primo nodo....

tyson69 Profilo | Newbie

Ciao, scusa per il ritardo....
ho provato come mi hai detto :
Dim myDataSet As DataSet = New DataSet
Dim drow As DataRow

myDataSet.Tables.Add("articoli")

myDataSet.Tables("articoli").Columns.Add("idarticolo")
myDataSet.Tables("articoli").Columns("idarticolo").DataType = GetType(Integer)
myDataSet.Tables("articoli").Columns.Add("descrizione")
myDataSet.Tables("articoli").Columns("descrizione").DataType = GetType(String)
myDataSet.Tables("articoli").Columns.Add("hits")
myDataSet.Tables("articoli").Columns("hits").DataType = GetType(Integer)
myDataSet.Tables("articoli").Columns.Add("voto")
myDataSet.Tables("articoli").Columns("voto").DataType = GetType(Integer)

myDataSet.ReadXml(Server.MapPath("/xml/rate.xml"))

myDataSet.Tables("articoli").Columns.Add("Top5")
myDataSet.Tables("articoli").Columns("Top5").DataType = GetType(Int32) **
myDataSet.Tables("articoli").Columns("Top5").AutoIncrement = True
myDataSet.Tables("articoli").Columns("Top5").AutoIncrementSeed = 0
myDataSet.Tables("articoli").Columns("Top5").AutoIncrementStep = 1

ma mi genera 1 errore "Impossibile modificare il DataType di una colonna contenente dati" in questo punto**

tyson69 Profilo | Newbie

io avrei anche 1 altra idea... te la cavi con xslt??

tyson69 Profilo | Newbie

...non ho capito la risposta....
cmq ho messo giù un po di codice, e manco a dirlo....non funziona....

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="/">
<xsl:apply-templates select="articoli/articolo[position()&lt;=3]">
<xsl:sort select="voto" order="ascending"/>
</xsl:apply-templates>
</xsl:template>

<xsl:template match="/">
<html>
<body>
<table>
<tr>
<th>Descrizione</th>
<th>Voto</th>
</tr>
<xsl:for-each select="articoli/articolo">
<tr>
<td><xsl:value-of select="descrizione"/></td>
<td><xsl:value-of select="voto"/></td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2023
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5