Login Login
MORE

WIDGETS

Widgets

Wanted articles
Who is online?
Article tools

CSharp:XML Tips di operazioni

From Aino Wiki

Jump to: navigation, search

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);
        }
    }
}
Risultati:
 

Esempio preso grazie a Jon Skeet



C# | XML XPath


Visual Studio

Author