[VB.NET Express 2010] Come sistemo le stringhe?

giovedì 14 aprile 2011 - 11.37
Tag Elenco Tags  VB.NET  |  .NET 2.0  |  Windows Server 2008 R2  |  Windows Server 2008  |  Windows Server 2003  |  Windows Server 2000  |  Windows 7  |  Windows Vista  |  Windows XP  |  Visual Studio Express

sciamanozx Profilo | Newbie

Salve, sono un autodidatta alle prime armi,
ho creato un software che invia i log xml dei backup acronis via email.
vorrei renderli piu leggibili.
praticamente contiene tante righe scritte cosi:
<event id="13" type="2" module="100" code="6" time="1302687974" message="operazione completata."/>
vorrei cancellare tutto cio che non riguarda il message, come potrei fare? E complicato?

nico839 Profilo | Senior Member

ciao, in pratica vorresti avere nel file solo :
"analisi della partizione 0-0 in corso..."
"analisi della partizione c: in corso..."
"priorità modificata in bassa"
"analisi della partizione c: in corso..." ?



Ciao.
Nicolas

http://perledinico.blogspot.com

utente Profilo | Junior Member

Anche io sono alle prime armi, però posso dirti che sicuramente .NET offrirà un parser per i file XML.
Quindi basta utilizzare quel parser ed estrarre tutte le informazioni che ti servono.
Oppure puoi pensare di utilizzare delle espressioni regolari, per tirarti fuori i dati che sono compresi tra 'message="' e '"'.
La strada con le espressioni regolari (se è utilizzata come ti ho suggerito) può creare dei problemi se comapare la scrita message="qualcosa" dentro al testo del messaggio

nico839 Profilo | Senior Member

potresti fare una cosa del genere

' crei un oggetto xml document Dim Xmlfile As New Xml.XmlDocument Dim XmlLeggi As New XmlTextReader(file) XmlLeggi.WhitespaceHandling = WhitespaceHandling.None Xmlfile.Load(XmlLeggi) ' lo carichi col tuo log.xml ' estrai la lista dei nodi "event" in un arrei xmlnodelist Dim xmlNodo As Xml.XmlNodeList xmlNodo = Xmlfile.GetElementsByTagName("event") ' scorri tutti i nodi e ti estrapoli il valore della proprietà "message" For Each item As XmlNode In xmlNodo Dim str As String = item.Attributes("message").Value Next XmlLeggi.Close() XmlLeggi = Nothing

attenzione ai caratteri non validi nell'xml.
Ciao.
Nicolas

http://perledinico.blogspot.com

kataklisma Profilo | Senior Member

>Salve, sono un autodidatta alle prime armi,

Ciao :)

>ho creato un software che invia i log xml dei backup acronis
>via email.
>vorrei renderli piu leggibili.
>praticamente contiene tante righe scritte cosi:
><event id="13" type="2" module="100" code="6" time="1302687974"
>message="operazione completata."/>
>vorrei cancellare tutto cio che non riguarda il message, come
>potrei fare? E complicato?

Puoi percorrere due strade : se devi gestire l'intero Xml ti conviene utilizzare la classe XmlTextReader (System.Xml), ti riporto ad un piccolo articolo : http://support.microsoft.com/kb/307548


Altrimenti puoi utilizzare una semplice Regex per estrapolare le stringhe dal file :

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra


Se mettiamo sul piatto le prestazioni e il risultato che devi effettivamente ottenere (che non è altro che un'estrapolazione di determinate stringhe, quindi, nessun lavoro sull'xml) ti consiglierei la Regex.

Ciao :)
------------------------------------------
Ignazio Catanzaro

http://blogs.dotnethell.it/swdev/

sciamanozx Profilo | Newbie

Grazie!
che rapidita!
non avevo valutato la strada dell'XML, lo voglio assolutamente provare, se non ci riuscirò usero Regex.
Siete mitici, grazie ancora

sciamanozx Profilo | Newbie

mi sembra dia un errore riferito alla à accentata.
Eccezione first-chance di tipo 'System.Xml.XmlException' in System.Xml.dll

ha dei problemi con le lettere accentate forse?

nico839 Profilo | Senior Member

si, infatti ti avevo scritto di fare attenzione a caratteri con cui l'xml da errore, tipo le accentate o i caratteri di escape.


Ciao.
Nicolas

http://perledinico.blogspot.com

sciamanozx Profilo | Newbie

immaginavo, ma è risolvibile? perchè nei log ci sono caratteri accentati?
sto cercando su google e microsoft , ma non capisco come ignorare i caratteri speciali :\
ps. che bello giocare finalmente con gli XML!

nico839 Profilo | Senior Member

si, è risolvibile. puoi sostituire la codifica da "UTF-8" a "ISO-8859-1" e non ci sono più problemi di accenti.


Ciao.
Nicolas

http://perledinico.blogspot.com

sciamanozx Profilo | Newbie

Grande! funziona!
quindi devo aprire il file di log, modificare la scritta utf-8 in ISO-8859-1
e poi aprirlo in xmlreader.

scusa se rompo ancora, c'è un modo generico per leggerli tutti senza problemi di caratteri speciali?
tipo obbligare a leggerli tutti in ISO-8859-1 ?

nico839 Profilo | Senior Member

prova a guardare qui.

http://support.microsoft.com/kb/317169/it
Ciao.
Nicolas

http://perledinico.blogspot.com

totti240282 Profilo | Guru

ma l'xmlnode equivale ad un xmlelement ???

cioè

<elemento>

questo è sia un nodo che un elemento giusto ???.
C'è solo un capitano !!!!!!

sciamanozx Profilo | Newbie

emmm... ho letto l'articolo e provato a capire + ricercati altri, ma non ci arrivo su come obbligarlo a leggere sempre con la codifica che mi hai consigliato.
domani ci riprovo a mente fresca, forse avrò più fortuna. ù
grazie ancora per la disponibilità

nico839 Profilo | Senior Member

non ho guardato molto bene, ma dovrebbe essere una cosa tipo :

Dim Xmlfile As New Xml.XmlDocument Xmlfile.Load("C:\log.xml") If (Xmlfile.FirstChild.NodeType = XmlNodeType.XmlDeclaration) Then ' Get the encoding declaration. Dim decl As XmlDeclaration decl = CType(Xmlfile.FirstChild, XmlDeclaration) ' Set the encoding declaration. decl.Encoding = "ISO-8859-1" End If ' estrai la lista dei nodi "event" in un arrei xmlnodelist Dim xmlNodo As Xml.XmlNodeList xmlNodo = Xmlfile.GetElementsByTagName("event") ' scorri tutti i nodi e ti estrapoli il valore della proprietà "message" For Each item As XmlElement In xmlNodo Dim str As String = item.Attributes("message").Value Next

per quanto riguarda la distizione tra xmlNode e xmlElement , qui
http://www.giuseppesicari.it/articoli/framework-dot-net/document-object-model/

e qui
http://www.comefarea.it/internet/aspnet/xml/parte2.php

spiega un po le differenze.

Ciao.
Nicolas

http://perledinico.blogspot.com

sciamanozx Profilo | Newbie

grazie, ho provato ad cercare un altro log, funziona, sono convinto che il log che usavo fosse danneggiato.
ora funziona tutto, GRAZIE ANCORA.
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-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5