CSharp:XML Tips di operazioni
From Aino Wiki
Contents
Lettura XML
Caricamento
Semplice caricamento di un XML
XmlDocument doc = new XmlDocument(); doc.Load(fname);
Ricerca
Per ottenere un elemento e d un suo attributo ecco un esempio che ricerca su due elementi di cui uno annidato.
Segue l'xml letto:
<SHIP_DATA ID="573953" COMPANY_CODE="C" SHIP_CODE="AT" GMT_DATETIME="2015-08-30T16:33:35.9500704Z" UDC_VERSION="1.10.09"> <POSITION CoordinateType="GPS" Source="O" TS="2015-08-30T16:33:35.4608134Z"> <LATITUDE>33.8860664367676</LATITUDE> <LONGITUDE>127.47582244873</LONGITUDE> </POSITION> </SHIP_DATA>
Ecco il codice:
fileNameXMLData = list[index].FullName; xmlDocument.Load(fileNameXMLData); //... srvVersionDetected = xmlDocument.SelectSingleNode("SHIP_DATA").Attributes["UDC_VERSION"].Value; currentShipPositionStrTS = xmlDocument.SelectSingleNode("SHIP_DATA/POSITION").Attributes["TS"] == null ? string.Empty : xmlDocument.SelectSingleNode("SHIP_DATA/POSITION").Attributes["TS"].Value;
Costruzione di XML
Aggiunta di elemento con Attributo
Da stackoverflow, l'obiettivo è:
<Type> <Connections> <Conn ServerName="FAXSERVER\SQLEXPRESS" DataBase="SPM_483000" /> <Conn ServerName="FAXSERVER\SQLEXPRESS" DataBase="SPM_483000" /> </Connections> <UDLFiles /> </Type>
XElement element = new XElement("Conn"); XAttribute attribute = new XAttribute("Server", comboBox1.Text); element.Add(attribute);
Modifica di XML
Sostituzione di un valore di un elemento
XDocument xdoc = XDocument.Load("file.xml"); var element = xdoc.Elements("MyXmlElement").Single(); element.Value = "foo"; xdoc.Save("file.xml");
Elaborazione
Caricamento e Scansione
Usando XPath per caricare e scandire, LinQ per cercare, segue esempio (mix da StackOverflow query xDocument) :
Caricamento e ricerca elementi
XDocument xmlItemConfig = XDocument.Load(ConfigData.OPCUAConfig["ItemConfigFullPathFileName"].Value); XElement itemFromIMOInfo = xmlItemConfig.Descendants("key") .Where(t => (string)t.Attribute("key") == "#IMO" + imoNumber) .FirstOrDefault(); XElement itemBaseNodePath = xmlItemConfig.Descendants("key") .Where(t => (string)t.Attribute("key") == "#BaseNodePath") .FirstOrDefault(); string orgNumber = itemFromIMOInfo.Attribute("value").Value; string rootQueryPath = itemBaseNodePath.Attribute("value").Value .Replace("%%OrgNumber%%", orgNumber) .Replace("%%ImoNumber%%", imoNumber);
Scansione
using System; using System.Xml.Linq; class Test { static void Main() { string xml = @" <root> <child id='1'/> <child id='2'> <grandchild id='3' /> <grandchild id='4' /> </child> </root>"; XDocument doc = XDocument.Parse(xml); foreach (XElement element in doc.Descendants("grandchild")) { Console.WriteLine(element); } } }
Esempio preso grazie a Jon Skeet