Articoli con tag xml

Linq to Xml – gestione news (part 2)

1

Continuando quanto cominciato con la prima parte di questo tutorial implemento le altre due funzionalità fondamentali, ovvero la cancellazione e l’aggiornamento di una notizia.

Cancellazione

Come per la creazione creiamo un XDocument con li file delle news, poi individuiamo la notizia con l’attributo id corrispondete a quella che vogliamo eliminare e facciamo una Remove(). Non ci resta che salvare il file.

 XDocument newsXML = XDocument.Load(Server.MapPath("App_Data\\News.xml"));
 newsXML.XPathSelectElement("News/Notizia[@Id = '" + idNews + "']").Remove();
 newsXML.Save(Server.MapPath("App_Data\\News.xml"));

Modifica

Per la modifica utilizziamo la stessa tecnica usata per la cancellazione con l’unica differenza che non invochiamo la Remove() ma ma aggiorniamo i campi della notizia che intendiamo modificare

XDocument newsXML = XDocument.Load(Server.MapPath("App_Data\\News.xml"));
 XElement notizia= newsXML.XPathSelectElement("News/Notizia[@Id = '" + _idNews + "']");
 notizia.Element("Title").Value = "Nuovo Titolo";
 notizia.Element("Text").Value = "Nuovo testo";
 notizia.Element("Data").Value = "31/12/2010";
 notizia.Element("Evidence").Value = "False";
 newsXML.Save(Server.MapPath("App_Data\\News.xml"));

Se i miei post ti sono stati di aiuto o ti sono sembrati intressanti puoi offrirmi un caffè :)

Linq to Xml – gestione news (part 1)

1

Linq è molto semplice da imparare e nel contempo molto potente. Linq dispone di quattro implementazioni: Linq to Sql, Linq to Entities, Linq to DataSets, Linq to Object e Linq to XML. In questo post cercherò di implementare un piccolo sistema di gestione delle news basato su Linq to Xml.
Partiamo dalla nostra sorgente dati, ovvero dal file XML. Esso è composto dal primo elemento “News” all’interno del quale sono contenute tutte le “Notizia”. Ogni notizia possiede un attributo identificativo “Id” che corrisponde alla data trasformata in stringa secondo la convenzione yyyyMMddhhmmss. Le notizie inoltre possiedono l’elemento “Data” che rappresenta la data dell’evento per cui è stata creata la news e un elemento “Evidence” per identificare le news più importanti.

<?xml version="1.0" encoding="utf-8"?>
<News>
  <Notizia Id="20100707102340">
    <Title>My first new</Title>
    <Text>My text,go on antferr.com</Text>
    <Data>07/07/2010</Data>
    <Evidence>True</Evidence>
  </Notizia>
  <Notizia Id="20100706102340">
    <Title>My second new</Title>
    <Text>Hello readers</Text>
    <Data>06/07/2010</Data>
    <Evidence>True</Evidence>
  </Notizia>
</News>


Fatto ciò non ci resta che creare la web application ASP.NET C#, ipotizzando di inserire il file xml nella directory App_Data e di chiamarlo semplicemente News.xml
Partiamo dal backend, cioè dalla parte amministrativa che deve implementare le funzionalità di inserimento, modifica e cancellazione delle news.

Inserimento

XDocument newsXML = XDocument.Load(Server.MapPath("App_Data\\News.xml"));
                XElement elemento = newsXML.Element("News");
                var notizia = new XElement("Notizia", new XAttribute("Id", news.Id),
                    new XElement("Title", "Il mio titolo"),
                    new XElement("Text", "Il mio testo"),
                    new XElement("Data", "10/07/2010"),
                    new XElement("Evidence", "True")
                        );
                elemento.Add(notizia);
                newsXML.Save(Server.MapPath("App_Data\\News.xml"));

Per far sì che il codice sopra funzioni correttamente è necessario aggiungere i riferimenti a System.Xml.Linq e System.Xml.XPath. Il funzionamento è molto semplice. Creiamo un oggetto di tipo XDocument all’interno del quale carichiamo il contenuto del nostro file xml, poi creiamo un oggetto di tipo XElement che conterrà il contenuto del tag . A questo punto non ci resta che creare una nuova come un nuovo XElement da aggiungere sotto il tag e salvare il file. Ovviamente il contenuto della news non dovrebbe essere cablato come in questo esempio ma derivante da input inseriti dall’amministratore.

Se i miei post ti sono stati di aiuto o ti sono sembrati intressanti puoi offrirmi un caffè :)

Torna all'inizio