Sobrewm XML | Xml Schema | Class (Computer Programming)

Coletânea de Dados Sobre Windows Mobile XML

Última Impressão em 16/08/2010 17:21:00

XmlDocument Xdoc=new XmlDocument(); Xdoc.Load("\\Storage Card\\trial.xml");

XmlDocument xmlFile = new XmlDocument(); xmlFile .Load(@"\My Documents\myXML.xml"); XmlNodeList nodeList = xmlFile.GetElementsByTagName("resources"); foreach (XmlElement elem in nodeList) { foreach (XmlElement elem2 in elem.ChildNodes) { //.... do all your stuff here or loop more! <Configuration> <FName>Jack</FName> <SName>Sparrow</SName> </Configuration> using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Xml; namespace ReadFromXML { class Program { private const string sXML_File_Path = @"C:\Test\XML_Configuration_File.xml"; static void Main(string[] args) { string sFirstName = GetXmlConfigValue("FName"); string sSecondName = GetXmlConfigValue("SName"); Console.WriteLine(sFirstName + " " + sSecondName); Console.Read(); } public static string GetXmlConfigValue(string sNodeName) { string sNodeValue = ""; XmlDocument xml_Document = null; XmlNodeList xnlNodelist = null; XmlNode xnParent = null; XmlNode xnChild = null; xml_Document = new System.Xml.XmlDocument(); try


//Load the XML document xml_Document.Load(sXML_File_Path); //Find the node by Tagname which should be exactle same as in our XML Configuration xnlNodelist = xml_Document.GetElementsByTagName(sNodeName); //Point to parent node from the Node List(In our example Configuration is the Parent Node. xnParent = xnlNodelist.Item(0); //Point to Child node. xnChild = xnParent.ChildNodes[0]; //Read the value from the child node. sNodeValue = xnChild.InnerText.ToString();


} catch (Exception ex) { throw ex; } return sNodeValue; } } }

elements. XmlValidatingReader.NET model to read and write XML documents from relational databases and vice versa. I will discuss XML . XmlWriter. Next namespace in Xml series is System. First. ReadString. you will see how to read and write XML documents in Microsoft . . and ReadStartElement are more read methods. This namespace contains many classes to read and write XML documents.Xsl to support XML classes. ReadInnerXml. we are going to concentrate on reader and write class. The System. XmlDocumentFragment class represents a document fragment. In the end of this article. System. System. These reader and writer classes are used to read and write XMl documents. MoveToFirstAttribute. The Read method reads a node in the stream. The Load and LoadXml methods can be used to load XML documents and Save method to save a document respectively.NET XML Namespaces and Classes Before start working with XML document in . this class also contains methods to navigate through a document nodes. you will see how to read and write XML documents.NET provides five namespace System.Xml.NET Runtime Library. MoveToFirstContent. comments. and System. These classes are . The XmlReader class is an abstract bases classes and contains methods and properties to read a document. As their name explains. this class represents a single node of XML but that could be the root node of an XML document and could represent the entire file. MoveToElement and MoveToNextAttribute. This class is an abstract base class for many useful classes for inserting.Xml namespace contains major XML classes. which can be used to add to a document. In spite of above discussed classes.NET Framework Library namespace and classes. XmlDataDocument and XmlDocumentFragment. It is important to know about . spaces.Xml. ReadOuterXml. I will show you how to take advantage of ADO. Although.Xml. name. and replacing nodes. they are used to read text. This class provides many write method to write XML document items. It also provides functionality to add XML items such as attributes. XmlDocument class represents an XML document and provides methods and properties to load and save a document. and XmlTextWriter. The XmlTextReader. The XmlWrite class contains functionality to write data to XML documents. and schemas.NET data set objects. System. This class is base class for XmlTextWriter class. which we'll be using in our sample example. XmlNodeReader. As you can see there are four reader and two writer classes. In this article. Introduction to Microsoft . XmlTextReader.XPath. It classes to work with XML schemas . We'll see these methods in our sample example. It also contains properties to get a parent or child.Xml. MoveToContent. navigating through the document. removing.Xml namespace contains more classes.NET namespace and classes provided by .NET and XML . and XmlNodeList.Schema. Few of them are XmlConvert.Serialization. and new nodes. Then. Three major classes derived from XmlNode are XmlDocument.Xml.Schema. XmlNodeReader and XmlValidatingReader classes are derived from XmlReader class. Some of these methods are MoveToAttribute.NET using C# language. System. last child.In this article. node type and more. XmlLinkedNode. Besides reading functionality.Xml. This class also has a method Skip to skip current node and move to next one. The XmlDataDocument class provides methods and properties to work with ADO. node.NET Framework.XmlReader. The XmlNode class plays an important role.

Serialization namespace contains classes that are used to serialize objects into XML format documents or streams. This file comes with VS. node.xml"). XPathExression. This namespace has following classes -XPathDocument. using System. and XPathNodeIterator. After creating an instance of XmlTextReader.Xml. XmlReader class has properties such as Name. textReader. This class contains many Move methods to move through a document.xml").Xml. I am using XmlTextReader class to read an XML file. Or you can use any XML file. XmlSchemaAll. About Sample Example 1 In this sample example. The System.NET samples. namespace ReadXml1 { class Class1 { static void Main(string[] args) { // Create an isntance of XmlTextReader and call Read method to read the file XmlTextReader textReader = new XmlTextReader("C:\\books.xml"). Depth. // If the node has value . XmlNodeReader and XmlValidatingReader classes are derived from XmlReader class. You read a file by passing file name as a parameter in constructor. you can read all information and data stored in a document. XPathNavigator. BaseURI. With the help of XpathDocument. XmlSchemaXPath.Xsl namespace contains classes to work with XSL/T transformations. and schemas respectively. Reading XML Documents In my sample application. The System. After read method is called. List 1 reads a document and displays a node information using these properties.Read(). Besides XmlReader methods and properties.Xml. these classes also contain members to read text. You can search this on your machine and change the path of the file in the following line: XmlTextReader textReader = new XmlTextReader("C:\\books.such XmlSchema.XPath Namespce contains XPath related classes to use XPath specifications. using System. I'm using books. you call Read method to start reading the document. I read an XML file using XmlTextReader and call Read method to read its node one by one until end of file and display the contents to the console output. The XmlTextReader. LineNumber an so on. XmlTextReader textReader = new XmlTextReader("C:\\books. The System.xml to read and display its data through XmlTextReader. XmlSchemaType.Xml. XpathNavigator provides a fast navigation though XML documents. Sample Example 1.

int cc = 0. // Read a document XmlTextReader textReader = new XmlTextReader("C:\\books. // Read this element's properties and display them on console Console.ToString()).WriteLine("Attribute Count:" + textReader. int xd = 0.WriteLine("Local Name:" + textReader.ToString()).WriteLine("Name:" + textReader.ToString()). Console. In the end. The XmlNodeType enumeration has a member for each type of XML item such as Attribute. After reading a node. Comment.Read()) { // Move to fist element textReader.WriteLine("Node Type:" + textReader. Console. } The NodeType property of XmlTextReader is important when you want to know the content type of a document. Console. namespace ReadingXML2 { class Class1 { static void Main(string[] args) { int ws = 0.} } } while (textReader. I read an XML file using XmlTextReader and call Read method to read its node one by one until end of the file. Console.ToString()).LocalName). CDATA. Sample Example 2. using System. DocumentType.WriteLine("Line Number:" + textReader. Console.WriteLine("==================="). Entity. int ac = 0. WhiteSpace and so on. int pi = 0.ToString()). Document. Element. Console.Name).Xml.WriteLine("Base URI:" + textReader.Depth.WriteLine("Depth:" + textReader.xml").Value. . using System.AttributeCount.BaseURI). int el = 0. List 2 code sample reads an XML document. Console. Console.WriteLine("Attribute Count:" + textReader. I check its NodeType property to find the node and write node contents to the console and keep track of number of particular type of nodes.NodeType.LineNumber. Console.WriteLine("XmlTextReader Properties Test"). ProcessInstruction. finds a node type and writes information at the end with how many node types a document has. int et = 0. I display total number of different types of nodes in the document.MoveToElement(). About Sample Example 2 In this sample example. int dc = 0.

WriteLine("Total Comments:" + cc.WriteLine("Attribute:" + textReader.Name.ToString()). ws = ws + 1.Read()) { XmlNodeType nType = textReader.Name. // If node type us a declaration if (nType == XmlNodeType.Whitespace) { Console.DocumentType) { Console. et = et + 1.WriteLine("Element:" + textReader.WriteLine("Total Elements:" + el.Name. xd = xd + 1.XmlDeclaration) { Console. } // if node type is a comment if (nType == XmlNodeType.ToString()). Console.ToString()). } // if node type a document if (nType == XmlNodeType. dc = dc + 1.NodeType. } // if node type us an attribute if (nType == XmlNodeType. } // if node type is an element if (nType == XmlNodeType.Name. } } // Write the summary Console.WriteLine("Entity:" + textReader. } // if node type is an entity\ if (nType == XmlNodeType.ToString()).Comment) { Console.ToString()). el = el + 1.ToString()).WriteLine("Document:" + textReader.Name.WriteLine("Total Attributes:" + ac. pi = pi + 1. Console.Name.Name.ToString()).Name. } // if node type is a Process Instruction if (nType == XmlNodeType. cc = cc + 1.ToString()). .WriteLine("Declaration:" + textReader.Attribute) { Console. } // if node type is white space if (nType == XmlNodeType.ToString()).Element) { Console.// Read until end of file while (textReader.WriteLine("WhiteSpace:" + textReader.ToString()).WriteLine("Comment:" + textReader.Entity) { Console.WriteLine("Entity:" + textReader.Entity) { Console.ToString()). ac = ac + 1.

Process Instructions:" + pi. which writes an XmlReader to a document as a node of the document. WriteAttributes. you call WriteEndDocument and TextWriter's Close method. WriteComment method writes comment to a document. For example. You must have to open a document before start writing to it. In my sample example. When you're done writing. PI).xsl'" textWriter. you can use WriteProcessingInstruction and WriteDocType methods to write a ProcessingInstruction and DocType items of a document.WriteLine("Total Console. We'll pass a string (file name) as an argument. WhiteSpaces:" + ws. It is an abstract base class used through XmlTextWriter and XmlNodeWriter classes.ToString()). The WriteStartDocument and WriteEndDocument methods open and close a document for writing. WriteNode is more write method.WriteEndDocument(). WriteStartElement and WriteEndElement methods pair can be used to write an element to a document. first thing you call us WriterStartDocument. Declaration:" + xd. Although. let's see some of them. Besides many methods. which can take a string. DocumentType:" + dc. For example. it's not possible to describe all the Writexxx methods here. and WriteEndElement are some of them. WriteState. For example. textWriter. //Write the ProcessingInstruction node string PI= "type='text/xsl' href='book. textWriter.ToString()). Some of these methods are used in a start and end pair. It takes only one string type of argument. this class has three properties. // Create a new file in C:\\ dir XmlTextWriter textWriter = new XmlTextWriter("C:\\myXmFile. I create a file myXmlFile. With the help of WriteString.WriteLine("Total Console. null) . The WriteStartAttribute and WriteEndAttribute pair writes an attribute.WriteStartDocument().ToString()). Writing XML Documents XmlWriter class contains the functionality to write to XML documents.WriteProcessingInstruction("xml-stylesheet". First thing we need to do is create an instance of XmlTextWriter using its constructor. XmlTextWriter has three overloaded constructors.WriteLine("Total Console. The WriteState gets and sets the state of the XmlWriter class.Close(). and XmlSpace.xml in C:\\ root directory. textWriter. which we're going to create in C:\ root. or a TextWriter as an argument. WriteString. you need to call WriteStartElement then write a string followed by WriteEndElement. After creating an instance. .} } } Console.xml". stream.WriteLine("Total Console. WriteStartElement.ToString()). WriteString method writes a string to a document. This class has several Writexxx method to write every type of item of an XML document.WriteLine("Total Entity:" + et. WriteNode. XmlLang.ToString()). It contains methods and properties to write to XML documents. to write an element.

WriteEndElement(). Nothing. ch[1] = 'r'. textWriter.xml using XmlTextWriter and use its various write methods to write XML items. "<!ENTITY h 'softcover'>"). // Write next element textWriter.WriteEndDocument(). textWriter. After that we read our books. In this sample example.xml. "RECORD". See Listing 514. textWriter. .Close(). null). 0.WriteComment("First Comment XmlTextWriter Sample Example"). textWriter.WriteStartElement("Char").WriteEndElement(). ch. // Ends the document. // close writer textWriter. "").WriteString("Student").WriteStartElement("r". textWriter. // Write one more element textWriter. About Sample Example 3 In this sample example. We create a new xml file c:\xmlWriterTest.Xml.WriteDocType("book". The below sample example summarizes all these methods and creates a new xml document with some items in it such as elements. ch[2] = 'c'. textWriter. // Write comments textWriter.WriteStartDocument(). // WriteChars char[] ch = new char[3]. textWriter. textWriter.Length).WriteStartElement("Student"). we add comments and elements to the document using Writexxx methods. strings.WriteComment("myXmlFile. Sample Example 3.WriteString("Colony"). textWriter. comments and so on.xml using XmlTextWriter. textWriter.xml in root dir"). namespace ReadingXML2 { class Class1 { static void Main(string[] args) { // Create a new file in C:\\ dir XmlTextWriter textWriter = new XmlTextWriter("C:\\myXmFile. Nothing.WriteStartElement("Name".xml".//'Write the DocumentType node textWriter. attributes. we create a new xml file c:\xmlWriterText.WriteStartElement("Address". using System. // Write first element textWriter. // Opens the document textWriter.WriteEndElement().xml xml file using XmlTextReader and add its elements to xmlWriterTest. I create a new file myxmlFile.WriteChars(ch.xml using XmlTextWriter: After that. In this sample example. "urn:record"). using System. ""). ch[0] = 'a'.

XmlTextReader reader = new XmlTextReader("c:\\books. A Load method loads XML data from a string.xml"). you will see how to read a database table's . TextReader or XmlReader. About Sample Example 5 Here is one example of how to load an XML document using XmlTextReader. You can also use Save method to display contents on console if you pass Console. //Create the XmlDocument. In this sample example. // load reader doc. doc.} } } Using XmlDocument The XmlDocument class represents an XML document.xml file using XmlTextReader and call its Read method.Load(reader). reader.Save(Console.Out as a arameter. LoadXml method loads XML document from a specified string. This class provides similar methods and properties we've discussed earlier in this article.LoadXml(("<Student type='regular' Section='B'><Name>Tommy ex</Name></Student>")). stream. Writing Data from a database to an XML Document Using XML and ADO.Save("C:\\std. XmlDocument doc = new XmlDocument().xml"). stream. //Save the document to a file. After that we call XmlDocumetn's Load method to load XmlTextReader contents to XmlDocument and call Save method to save the document.NET mode. TextWriter or XmlWriter. doc. reading a database and writing to an XML document and vice versa is not a big deal.Out). Using Save method you can write XML data to a string. we read books.Read(). In this section of this article.Out as a Save method argument displays data on the console Sample Example 5. We call LoadXml method of XmlDocument to load an XML fragment and call Save to save the fragment as an XML file. // Display contents on the console doc. Another useful method of this class is Save.Out). Passing Console. //Load the the document with the last book node. For example: doc.Save(Console. XmlDocument doc = new XmlDocument(). About Sample Example 4 This tiny sample example pretty easy to understand. Sample Example 4. Load and LoadXml are two useful methods of this class.

mdb".OldDb namespace to use OldDb data adapters in your program. "Customers").Xml file in C:\ and write the contents to an XML document. You can use any database you want. After that I create a data adapter object by passing a SELECT SQL query and connection. Once you have a data adapter. con). using System. // create a data adapter OleDbDataAdapter da = new OleDbDataAdapter("Select * from Customers".0. // write dataset contents to an xml file by calling WriteXml method ds.xml"). which creates an XML document and write its contents to the XML document.OLEDB. Then you can WriteXml method of DataSet. The DataSet class provides method to read a relational database table and write this table to an XML file.Data. Sample Example 6. namespace ReadingXML2 { class Class1 { static void Main(string[] args) { // create a connection OleDbConnection con = new OleDbConnection(). About Sample Example 6 In this sample. // create a new dataset DataSet ds = new DataSet().ConnectionString = "Provider=Microsoft. first I create a connection with northwind database using OldDbConnection. using System. In this sample example.Data. I have used OldDb data provides. After that I can fill method to fill a dataset from the data adapter. You need to add reference to the Syste.Jet. } } } Summary . con.4.Xml. you can fill a dataset object using Fill method of the data adapter.Data Source=C:\\Northwind. using System. I reate a data adapter object and selects all records of Customers table.Data. we read Customers table records and write DataSet contents to OutputXml. XmlWriter and their derived classes contains methods and .WriteXml("C:\\OutputXML. Only thing you need to do is just chapter the connection string and SELECT SQ L query. In our sample.OleDb. You use WriteXml method to write a dataset data to an XML file. using System. As you can see from Sample Example 6. I have used commonly used Northwind database comes with Office 2000 and later versions.NET Framework Library provides a good support to work with XML documents. In this sample example. The XmlReader. // fill dataset da.Fill(ds.

properties to read and write XML documents. ADO.NET provides functionality to read a database and write its contents to the XML document using data providers and a DataSet object. you can read entire document. With the help of the XmlDocument and XmlDataDocument classes. . The Load and Save method of XmlDocument loads a reader or a file and saves document respectively.

Save("XMLFile1. writer.Text). XmlDeclaration dec = xmlDoc.WriteEndElement(). xmlDoc. "UTF-8".WriteStartElement("student"). writer.WriteElementString("lastname". writer.Text).writeElementString("date".AppendChild(dec). textBox2. null). . XmlTextWriter writer = new XmlTextWriter(@"\My Documents\XMLFile1.CreateXmlDeclaration("1. xmlDoc. writer.Outro : XmlDocument xmlDoc = new XmlDocument().WriteElementString("firstname".Text). dateTimePicker1.Close(). null). writer. writer.xml".0".xml"). textBox1.

Você pode usar LINQ To XML para realizar consultas LINQ sobre dados no formato XML que podem ser retornados do arquivo de sistemas. Ele fornece um modelo de programação que permite ler.Uma das grandes novidades da plataforma . construir e escrever dados XML. um dos membros do projeto LINQ. 100</rua> <cidade>Brasilia</cidade> <estado>DF</estado> <postal>7860456</postal> </endereco> .XML(XmlReader/XmlWriter) da versão anterior da plataforma . Já escrevi diversos artigos sobre LINQ To SQL . sendo também mais eficiente. neste artigo vou dar uma visão resumida sobre o LINQ To XML outro membro integrante do LINQ. documentos XML.NET. por usar menos memória. estrutura de dados. e. de uma URL HTTP remota.LINQ a partir da versão 3. O LINQ to XML é um provedor de dados LINQ que é implementado no namespace System. O LINQ To XML fornece mais recursos e facilidades para tratar com XML do que a API presente no namespace System. etc. que a API DOM do XmlDocument fornece.5 é o projeto LINQ que introduz um modelo de programação que permite acessar diretamente uma fonte de dados .Xml.5 da plataforma . usando uma sintaxe parecida com a linguagem SQL. coleção de objetos. de um web service ou partir de qualquer XML em memória existente. Apenas para mostrar uma comparação entre as duas técnicas temos abaixo um trecho de um documento XML e em seguida o código para a criação do documento usando a API DOM e o LINQ to XML: arquivo XML <contatos> <contato> <nome>Macoratti</nome> <fone tipo="residencia">9986-5544</fone> <fone tipo="trabalho">9986-2585</fone> <endereco> <rua>rua Mirassol.NET.NET versão 3.

_ New XElement("endereco".InnerText = "77860-456" Dim endereco As XmlElement = doc.CreateElement("fone") fone1. _ New XElement("postal".InnerXml Dim contatos As New XElement("contatos". "7786-456")))) TextBox1.InnerText = "9986-55-44" Dim fone1 As XmlElement = doc. _ New XElement("fone". New XAttribute("tipo".Código para gerar o XML XML usando a API DOM usando LINQ to XML Dim doc As New XmlDocument() Dim nome As XmlElement = doc. "Rua Mirassol.AppendChild(endereco) Dim contatos As XmlElement = doc.CreateElement("cidade") cidade.CreateElement("nome") nome. New XElement("rua". "Macoratti").CreateElement("estado") estado.CreateElement("fone") fone. _ New XElement("nome".InnerText = "Brasilia" Dim estado As XmlElement = doc.AppendChild(fone1) contato. _ New XElement("fone".Código para gerar o arquivo Button2 .InnerText = "Rua Mirassol .CreateElement("endereco") endereco.AppendChild(estado) endereco. "DF").TextBox1 .AppendChild(cidade) endereco. "trabalho")). 100"). Abra o VB 2008 Express e crie um novo projeto Windows Application e no formulário padrão form1. a seguir inclua o código abaixo no evento Click dos respectivos botões: Button1 . "residencia") fone.CreateElement("contato") contato. 100" Dim cidade As XmlElement = doc. "Brasila").</contato> </contatos> Vamos criar um projeto do tipo Windows Application no VB 2008 Express para exibir o documento XML criado em um TextBox.ToString .SetAttribute("tipo". "trabalho") fone1.Text = doc. "residencia")).SetAttribute("tipo".AppendChild(nome) contato.AppendChild(postal) Dim contato As XmlElement = doc.InnerText = "Macoratti" Dim fone As XmlElement = doc.vb inclua dois botões de comando e uma caixa de texto . _ New XElement("cidade".CreateElement("rua") rua. _ New XElement("contato". _ New XElement("estado". New XAttribute("tipo".AppendChild(fone) contato.CreateElement("contatos") contatos.AppendChild(rua) endereco.AppendChild(contatos) TextBox1.CreateElement("postal") postal. "9986-55-44".AppendChild(contato) doc.Text = contatos.InnerText = "9986-25-85" Dim rua As XmlElement = sua propriedade Multiline igual a True.InnerText = "DF" Dim postal As XmlElement = doc. "9986-85-25".

se você desejar usar um elemento através de múltiplos documentos vai precisar importar os nós através do documento. XElement("nome") No LINQ to XML você pode criar elementos XML diretamente: Ex: Dim nome As New Vejamos a seguir a figura que mostra a hierarquia de classes do LINQ To XML Analisando a hierarquia de classes destacamos: • • • • Embora o XElement esteja em um nível inferior na hierarquia ele é uma classe fundamental do LINQ To XML. incluindo elementos e atributos. . precisam ser criados no contexto de um documento XML: Dim doc As New XmlDocument() Dim nome As XmlElement = doc. As árvores XML são feitas de uma árvore de XElements.Perceba que no código onde usamos DOM os nós. Todos os outros XNodes podem somente ser nós abaixo de XElement ou de um XDocument se ele existir. Enquanto que os XDocument são criados somente se necessário como para manipular um DTD ou uma instrução de processamento XML( XProcessingInstruction).CreateElement("nome") O conceito de documento XML é fundamental no DOM e os nós XML são criados no contexto do documento XML. Os XAttributes são pares nome/valor associados a um XElement. O LINQ To XML simplifica essa abordagem.

Vamos criar a seguir um documento XML contendo nomes. Um XElement pode conter outro XElement . um XProcessingInstruction e texto.• • • O único XNode que pode possuir filhos e um XContainter : XDocument ou XElement..Document Type Definition. XProcesingInstructionRepresenta o processamento de uma instrução de um documento XML. XDeclaration Representa uma declaração XML. remov XElement filhos). modificar o conteúdo dos elementos (incluir. XAtributte ou outra entidade que o documento necessita. um XDeclaration . um XDocumentType ou um XProcessingInstruction. XAttribute Usado para criar um par nome/valor no interior de um elemento do arquivo X XName Representa um nome completo XML consistindo de um objeto XNamespace e d XComment Representa um comentário XML. A estrutura do arquivo XML criado deverá ser igual a: <clientes> <cliente codigo="1"> <nome>Macoratti</nome> <email>macoratti@yahoo. Permite criar elementos . As principais classes do LINQ To XML são: Nome da Classe Descrição Atua como um container para a árvore XML e deve ser usado somente se nece XDocument documento com um arquivo XML. Um XDocument pode conter um XElement (a raiz). XDocumentType Representa um documento XML DTD . modifica os atributos dos elementos . Para poder usar os recursos do LINQ você vai precisar possuir instalado o Visual Basic 2008 Express Edition: Se não tiver pegue aqui: Visual Basic 2008 Express Edition Criando documentos XML Para criar documentos completos XML você deve primeiro instanciar o objeto XDocument e então incluir o elemento XElement. salvar como um arquivo XML.. XTest Representa um nó Texto. Se você deseja criar apenas um fragmento XML a classe XElement é tudo que você</email> </cliente> <cliente codigo="2"> <nome>Jessica</nome> . Vamos ver então como esse tal de LINQ To XML funciona.

_ New XElement("cliente".com. _ New XElement("nome". Inclua o código abaixo no evento Click do botão de comando: Dim xmlDoc As New XElement("clientes". _ New XElement("email". _ New XElement("cliente".com")). "</email> </cliente> </clientes> Abra o VB 2008 e crie um novo projeto do tipo Windows Application com nome VB8_LNQ_XML1.vb inclua um componente TextBox com nome txtXmlDoc e um botão de comando . _ New XAttribute("codigo".Usando somente a classe XElement podemos gerar diretamente o XML desejado. _ . "Macoratti"). "1"). No formulário form1.<email>jessica@bol.Gerar XML segundo o seguinte leiaute: A seguir temos duas maneiras distintas de obter o XML: 1.

com. "macoratti@yahoo. "Macoratti"). "1"). _ New XElement("cliente".ToString End Sub O resultado final seria o mesmo: . "jessica@bol. _ New XElement("email".com. "2"). Nothing). _ New XAttribute("codigo".com")).Click Dim xmldoc = criarDocumentoXML() txtXmlDoc. _ New XAttribute("codigo". "2").br"))) txtXmlDoc.Object. "Jessica"). "jessica@bol.0". _ New XElement("nome". ByVal e As System.Text = xmldoc. "Jessica"). _ New XElement("clientes". _ New XElement("nome".ToString 2.Usando o objeto Xdocument Neste caso vamos criar uma função chamada CriarDocumentoXML() conforme abaixo: Function criarDocumentoXML() As XDocument Return New XDocument( _ New XDeclaration("1. _ New XElement("cliente".EventArgs) Handles Button1.New XAttribute("codigo".br")))) End Function Agora no evento Click do botão de comando inclua o código: Private Sub Button1_Click(ByVal sender As System. _ New XElement("nome".Text = xmlDoc. _ New XElement("email". Nothing. _ New XElement("email".

com</email> </cliente> <cliente codigo="2"> <nome>Jessica</nome> <email>jessica@bol.Podemos ainda criar o documento XML reescrevendo a função CriarDocumentoXML usando o seguinte código: Function criarDocumentoXML() As XDocument Return <?xml version="</email> </cliente> </clientes> End Function .com.0" encoding="UTF-16" standalone="yes"?> <clientes> <cliente codigo="1"> <nome>Macoratti</nome> <email>macoratti@yahoo.

.EventArgs) Handles Button2.@codigo = "2" For Each cliente In clientes txtXmlConsulta. conforme o leiaute abaixo: Agora inclua no evento Click do botão de comando Consulta XML o código para obter o cliente de código igual a 2: Private Sub Button2_Click(ByVal sender As System. Inclua um novo controle TextBox com o nome txtXmlConsulta com Multiline=true e um botão de comando : Consulta XML.. Realizando Consultas Vamos realizar agora uma consulta no documento criado usando LINQ To XML.Object.Text = cliente.ToString Next End Sub .<cliente> _ Where c. ByVal e As System.O código acima além de mais legível apresenta o xml agora sendo usado como um tipo do Visual Basic.Click Dim xmldoc = criarDocumentoXML() Dim clientes = From c In xmldoc.

br</email>" & _ "</cliente>" & _ "<cliente . um XMLReader.Parse("<?xml version= '</email>" & _ "</cliente>" & _ codigo='2'>" & _ "<nome>Jessica</nome>" & _ "<email>jessica@bol. Se a entrada for uma string usamos o método Parse.0'?>" & _ "<clientes>" &_ "<cliente codigo='1'>" & _ "<nome>Macoratti</nome>" & _ "<email>macoratti@yahoo. um TextReader ou uma Veja um exemplo: Dim contatos As XElement = XElement.Executando o projeto obtemos o seguinte resultado: Carregando um arquivo XML Podemos carregar um arquivo XML já existente o LINQ To XML oferece múltiplas opções de fontes de entrada incluindo : um arquivo.

Aguarde em breve mais artigos sobre LINQ To XML.aspx .com/en-us/library/bb308960.Load("c:\teste\Macoratti."</clientes>") txtCarregaXML..xml") Como vimos a API LINQ To XML se propõe a efetuar o tratamento XML de uma maneira mais eficiente e com desempenho Para carregar um arquivo XML de outra fonte use o método Load: Dim testeXML As XElement = http://msdn2.Text = contatos. Pegue o projeto completo aqui : Referências: • VB8_LINQ_XML1.

Recursos utilizados -Visual Studio 2008 Express Edition SP1.Xml. static string arquivo = "C:\\documento.xml" O namespace System. • • C# VB.NET 1.Criando e manipulando XML com Linq to XML Introdução Criar e manipular XML utilizando Linq to XML ficou muito mais fácil. XmlDocument: é uma implementação da Microsoft para criação de documentos XML .Todos com atributos e elementos serão criados com os métodos SetAttributeValue e SetElementValue. mais muitos desenvolvedores utilizam os métodos WriteXml e ReadXml para criar e ler arquivos XML.selecione New Project e Console Application .xml". funciona perfeitamente mais o objetivo do DataSet e DataTable é outro. DataSet e DataTable: eles não foram criados para manipular XML . Clique em File. ao final desse artigo você percebera que com apenas um objeto você consegue criar e manipular arquivos XML. Conforme o código abaixo adicione o método CriaXML a definição da classe Program e chame-o do método Main. conforme as especificações W3C DOM.Linq contém todos os objetos necessários para cria e manipular XML . XPath: é uma das opções mais para tirar o máximo proveito do XPath você precisa de bons conhecimentos de expressões regulares . 1. existem muitas possibilidades para criar e manipular XML utilizando o .NET Framework. • • C# VB. O Linq to XML. Criando XML Na definição da classe Program adiciona o campo arquivo conforme código abaixo.para criar um arquivo XML vamos utilizar a classe XElement .NET . para salvar o arquivo a classe disponibiliza o método caixa nome altere o valor para LinqToXMLExemplo. substitui todas as opções disponíveis como a vantagem de ser extremante simples. Dim arquivo As String = "C:\\documento. Criando projeto Para demonstra com utilizar o Linq to XML vamos criar uma aplicação do Tipo Console Application.

16.Format("RG {0}". For I As Integer = 1 To 5 6. I)) 11. element. Console. documentoXml. i++) 7. } 21. 12. i)).Format("Nome {0}". //Adiciona elemento ao elemento root 19. End Sub . 22. i <= 5. i)).ToStri ng())) 7. 18. String.1. String.Format("RG {0}".SetElementValue("CPF". XElement element = null.Save(arquivo) 21.Format("Endereço {0}".SetElementValue("RG".SetElementValue("RG".WriteLine(documentoXml) 23.SetAttributeValue("Endereco". 'Adiciona elemento ao elemento root 17. 5. 10. 20. 17. new XComment("Atributos do cliente " + i)). element. Sub CriaXML() 2. 22. documentoXml.SetElementValue("CPF". New XComment("Atributos do cliente " + I. 9. Dim element As XElement = Nothing 4. 24. 14. I)) 14. 16. String. i)). 13.Format("CPF {0}". XElement documentoXml = new XElement("Clientes"). element.Format("Endereço {0}". I)) 10. element. 5. { 3. element.SetAttributeValue("Endereco".Add(element) 18. 6. 4. String. String. 'Atributos 9. element = New XElement("Cliente". 25. element. 'Elementos 13. static void CriaXML() 2. String.SetAttributeValue("Nome". Console. documentoXml. { 8.SetAttributeValue("Nome". 20.Save(arquivo). I)) 15. String. Next 19. element.Add(element). documentoXml. } 1.Format("Nome {0}". Dim documentoXml As New XElement("Clientes") 3. i)). String. //Elementos 15. //Atributos 11. 23. element = new XElement("Cliente". element.Format("CPF {0}".WriteLine(documentoXml). 12. for (int i = 1. 8.

as outras sobrecargas recebe como parâmetros um objeto TextReader ou XmlReader. Conforme código abaixo adicione o método CarregaSelecionaXml na definição da classe Program e chame-o do método Main. </cliente> 7. <cpf>CPF 4</cpf> 21. <rg>RG 1</rg> 5. <rg>RG 3</rg> 15. <rg>RG 2</rg> 10.Você também pode definir opções à partir do enum LoadOptions. <cliente nome="Nome 2" endereco="Endereço 2"> 8. <cliente nome="Nome 4" endereco="Endereço 4"> 18. <!--Atributos do cliente 5--> 24. </cliente> 12. None : todas as linhas desnecessárias. SetLineInfo: essa opção habilita o preenchimento da das informações de linha. em uma de suas sobrecargas podemos passar o caminho do arquivo XML . essa informações pode ser recuperadas através da interface IXmlLineInfo. <!--Atributos do cliente 1--> 4. </cliente> 17. PreserveWhitespace: essa opção define que todas as linhas em branco do arquivo XML serão preservadas. do arquivo XML não serão carregadas. <cliente nome="Nome 3" endereco="Endereço 3"> 13.Resultado da execução do método CriaXML.linhas em branco e linhas de informações. <cliente nome="Nome 5" endereco="Endereço 5"> 23. <rg>RG 4</rg> 20. • C# . </cliente> 22. <cpf>CPF 1</cpf> 6. • Arquivo XML 1. </clientes> Carregar arquivo Para carregar e selecionar valores utilizando Linq to XML podemos utilizar a classe XElement. <cpf>CPF 3</cpf> 16. </cliente> 27. <!--Atributos do cliente 4--> 19. <cpf>CPF 5</cpf> 26. SetBaseUri : essa opção define o preenchimento da propriedade BaseUri. <cpf>CPF 2</cpf> 11. <clientes> 2. <!--Atributos do cliente 3--> 14. O LoadOption possui quatro opções . Método Load: carregar conteúdo XML de um arquivo ou da memórias é a responsabilidade desse método. <cliente nome="Nome 1" endereco="Endereço 1"> 3. <rg>RG 5</rg> 25. <!--Atributos do cliente 2--> 9.

'Carrega todos os elementos dentro do elemento root 13.WriteLine("LineNumber : {0} e LinePosition: {1}". Sub CarregaSelecionaXml() 2. LoadOptions. 15. lineInfo.BaseUri).SetBaseUri Or LoadOptio ns.Elements() 14. xml. 'Mostra informações de linha 8.• VB.WriteLine("LineNumber : {0} e LinePosition: {1}". //Mostra todos os elementos dentro do elemento root 16. 'Mostra todos os elementos dentro do elemento root 16. 15. 7.Load(arquivo. XElement xml = XElement. 10. foreach (var item in enumerable) 17. 4.Elements(). } 27. 18. Console. For Each item In Enumerable . 5.SetLine Info).LinePosition) 11.LineNumber. 8.NET 1. Dim xml As XElement = XElement. 11. //Carrega todos os elementos dentro do elemento root 13. 12. Console. Console. 19. 23. Dim lineInfo As IXmlLineInfo = xml 9.BaseUri) 6. //Mostra o caminho base.SetLineInfo) 3.WriteLine(item). foreach (var item in enumerable. xml. 7.LineNumber. //Mostra todos os atributos nome do elento Cliente 20.Attributes("Nome")) 21.SetBaseUri | LoadOptions.WriteLine("Caminho : {0}". 4. </xelement> 1. { 3. IEnumerable<xelement> enumerable = xml. 5. static void CarregaSelecionaXml() 2. lineInf o. 12. Console.WriteLine(item). //Mostra todos os elementos CPF dentro do elemento Cliente 24.Elements("CPF")) 25. Console. lineInf o.WriteLine(item). foreach (var item in enumerable. 10.Load(arquivo. LoadOptions. //Mostra informações de linha 9. 26. Console. 'Mostra o caminho base. 6. Console. 14. IXmlLineInfo lineInfo = xml as IXmlLineInfo. lineInfo.LinePosition). 22.WriteLine("Caminho : {0}". Dim Enumerable As IEnumerable(Of XElement) = xml.

Value == "CPF 1")) 8. foreach (var item in elements. 20. //Salva Alterações 15. LoadOptions.WriteLine(item) 28. Sub AlterandoValores() 2. 16. item.SetBaseUri Or LoadOptio ns. static void AlterandoValores() 2.Value = "123456789".Elements(). LoadOptions. 5. Console. 4. 9. 6. 10. Next 29.WriteLine(item) 18.Attributes("Nome").Value == "Nome 1")) 12.Value = "Nome Alterado". item.Load(arquivo. 6.Where(e => e.WriteLine(item) 23. Console.Attributes("Nome") 22. For Each item In Enumerable. XElement xml = XElement.Elements("CPF") 27. 25. foreach (var item in elements.SetLine Info). Next 19.17. xml. //Seleciona e altera o atributo Nome aonde o valor seja igual a "Nome 1" 11.Where(e => e. Next 24.SetLineInfo) 3. 4. { 3. 'Mostra todos os atributos nome do elento Cliente 21. 'Mostra todos os elementos CPF dentro do elemento Cliente 26. 'Seleciona e altera o elemento CPF aonde o valor seja igual a "CPF 1" . 13.Load(arquivo. For Each item In Enumerable. End Sub Alterando valores Para isso utilizamos todo o poder do Linq para selecionar o atributo ou elemento que desejamos alterar. 14. Dim elements As IEnumerable(Of XElement) = xml. Console.Elements("CPF").SetBaseUri | LoadOptions. Dim xml As XElement = XElement.Save(arquivo).NET 1. //Seleciona e altera o elemento CPF aonde o valor seja igual a "CPF 1" 7. IEnumerable<XElement> elements = xml.Elements() 5. } 1. • • C# VB. Conforme o código abaixo adicione o método AlterandoValores na definição da classe Program e chame-o do método Main.

AncestorsAndSelf("Cliente"). Conforme o código abaixo adicione o método ExcluindoValores na definição da classe Program e chame-o do método Main.Where(Function(e) e.SetLineInfo) 3.Value = "CPF 1") 8. IEnumerable<XElement> elements = xml. { 3.Where(Function(e) e.SetBaseUri Or LoadOptio ns.Load(arquivo. End Sub Excluindo Valores O código abaixo demonstra como excluir um elemento do arquivo XML. 5.7. LoadOptions. 9.Elements(). elements. 6. Sub ExcluindoValores() 2.Remove(). Dim xml As XElement = XElement.AncestorsAndSelf("Cliente").SetLine Info). 11.Elements("CPF").Value = " Nome 2").Attributes("Nome"). esse exemplo retira o elemento cliente aonde o atributo nome seja igual a "Nome 2". 'Exclui elemento Cliente aonde o Atributo Nome seja igual a "Nome 2" 7. For Each item In elements.SetBaseUri | LoadOptions. For Each item In elements.NET 1. e para isso vamos utilizar mais uma vez o poder do Linq. } 1. elements. xml.Value = "123456789" 9. item.Where(Function(e) e. 8. xml. 9. Dim elements As IEnumerable(Of XElement) = xml. Next 15. static void ExcluindoValores() 2. item.Value = "Nome Alterado" 14. • • C# VB. LoadOptions.Attribute("Nome").Attribute("Nome").Remove() 8. //Salva Alterações 10. 4.Load(arquivo.Where(e => e. 6.Save(arquivo) 18. Next 10. 'Seleciona e altera o atributo Nome aonde o valor seja igual a "Nome 1" 12. 4.Elements() 5. 'Salva Alterações 17.Save(arquivo).Value == "Nome 2").Value = "Nome 1") 13. 11. XElement xml = XElement. 'Salva Alterações . //Exclui elemento Cliente aonde o Atributo Nome seja igual a "Nome 2" 7. 16.

aspx . ficou claro que o objeto XElement possui todas as funcionalidades necessárias para manipulação de arquivos XML. claro o Linq to XML não se define a um único objeto mais ele com certeza da conta do Referências http://msdn. xml.10. a criação de manipulação de arquivos XML ficou muito mais fácil.Save(arquivo) 11. End Sub Conclusão Com esse simples exemplo da para se ter idéia do que o Linq to XML e

Sign up to vote on this title
UsefulNot useful