Procedura: modificare valori letterali XML (Visual Basic)
Visual Basic consente di modificare agevolmente i valori letterali XML. È possibile aggiungere o eliminare elementi e attributi nonché sostituire un elemento esistente con un nuovo elemento XML. In questo argomento vengono forniti molti esempi di come modificare un valore letterale XML esistente.
Modificare il valore di un valore letterale XML
Per modificare il valore di un valore letterale XML, ottenere un riferimento al valore letterale XML e impostare la proprietà Value sul valore desiderato.
Nell'esempio di codice seguente viene illustrato come aggiornare il valore di tutti gli elementi <Price> in un documento XML.
For Each book In From element In catalog.<Catalog>.<Book> book.<Price>.Value = (book.<Price>.Value * 1.05).ToString("#.00") Next
Di seguito vengono illustrati il codice XML di origine e quello modificato, derivati dall'esempio.
Source XML: <?xml version="1.0"?> <Catalog> <Book id="bk101"> <Author>Garghentini, Davide</Author> <Title>XML Developer's Guide</Title> <Price>44.95</Price> </Book> <Book id="bk331"> <Author>Spencer, Phil</Author> <Title>Developing Applications with Visual Basic .NET</Title> <Price>45.95</Price> </Book> </Catalog> Modified XML: <?xml version="1.0"?> <Catalog> <Book id="bk101"> <Author>Garghentini, Davide</Author> <Title>XML Developer's Guide</Title> <Price>47.20</Price> </Book> <Book id="bk331"> <Author>Spencer, Phil</Author> <Title>Developing Applications with Visual Basic .NET</Title> <Price>48.25</Price> </Book> </Catalog>
Nota
La proprietà Value si riferisce al primo elemento XML in un insieme. Se nell'insieme sono presenti più elementi che hanno lo stesso nome, l'impostazione della proprietà Value ha effetto solo sul primo elemento nell'insieme.
Per aggiungere un attributo a un valore letterale XML
Per aggiungere un attributo a un valore letterale XML, ottenere innanzi tutto un riferimento al valore letterale XML. È quindi possibile aggiungere un attributo aggiungendo una nuova proprietà axis dell'attributo XML. È anche possibile aggiungere un nuovo oggetto XAttribute al valore letterale XML tramite il metodo Add. Nell'esempio seguente vengono illustrate entrambe le opzioni.
Dim newAttribute = "editorEmail" Dim editorID = "someone@example.com" For Each book In From element In catalog.<Catalog>.<Book> ' Add an attribute by using an XML attribute axis property. book.@genre = "Computer" ' Add an attribute to the Attributes collection. book.Add(New XAttribute(newAttribute, editorID)) Next
Di seguito vengono illustrati il codice XML di origine e quello modificato, derivati dall'esempio.
Source XML: <?xml version="1.0"?> <Catalog> <Book id="bk101" > <Author>Garghentini, Davide</Author> <Title>XML Developer's Guide</Title> <Price>44.95</Price> </Book> <Book id="bk331"> <Author>Spencer, Phil</Author> <Title>Developing Applications with Visual Basic .NET</Title> <Price>45.95</Price> </Book> </Catalog> Modified XML: <?xml version="1.0"?> <Catalog> <Book id="bk101" genre="Computer" editorEmail="someone@example.com"> <Author>Garghentini, Davide</Author> <Title>XML Developer's Guide</Title> <Price>44.95</Price> </Book> <Book id="bk331" genre="Computer" editorEmail="someone@example.com"> <Author>Spencer, Phil</Author> <Title>Developing Applications with Visual Basic .NET</Title> <Price>45.95</Price> </Book> </Catalog>
Per ulteriori informazioni sulle proprietà axis degli attributi XML, vedere Proprietà axis dell'attributo XML (Visual Basic).
Per aggiungere un elemento a un valore letterale XML
Per aggiungere un elemento a un valore letterale XML, ottenere innanzi tutto un riferimento al valore letterale XML. È quindi possibile aggiungere un nuovo oggetto XElement come ultimo sottoelemento dell'elemento utilizzando il metodo Add. Poi è possibile aggiungere un nuovo oggetto XElement come primo sottoelemento dell'elemento utilizzando il metodo AddFirst.
Per aggiungere un elemento nuovo in un percorso specifico rispetto agli altri sottoelementi, prima ottenere un riferimento a un sottoelemento adiacente. È quindi possibile aggiungere un nuovo oggetto XElement prima del sottoelemento adiacente utilizzando il metodo AddBeforeSelf. È anche possibile aggiungere un nuovo oggetto XElement dopo il sottoelemento adiacente utilizzando il metodo AddAfterSelf.
Ognuna di queste tecniche è illustrata negli esempi seguenti:
Dim vbBook = From book In catalog.<Catalog>.<Book> Where book.<Title>.Value = "Developing Applications with Visual Basic .NET" vbBook(0).AddFirst(<Publisher>Microsoft Press</Publisher>) vbBook(0).Add(<PublishDate>2005-2-14</PublishDate>) vbBook(0).AddAfterSelf(<Book id="bk999"></Book>) vbBook(0).AddBeforeSelf(<Book id="bk000"></Book>)
Di seguito vengono illustrati il codice XML di origine e quello modificato, derivati dall'esempio.
Source XML: <?xml version="1.0"?> <Catalog> <Book id="bk101" > <Author>Garghentini, Davide</Author> <Title>XML Developer's Guide</Title> <Price>44.95</Price> </Book> <Book id="bk331"> <Author>Spencer, Phil</Author> <Title>Developing Applications with Visual Basic .NET</Title> <Price>45.95</Price> </Book> </Catalog> Modified XML: <?xml version="1.0"?> <Catalog> <Book id="bk101" > <Author>Garghentini, Davide</Author> <Title>XML Developer's Guide</Title> <Price>44.95</Price> </Book> <Book id="bk000"></Book> <Book id="bk331"> <Publisher>Microsoft Press</Publisher> <Author>Spencer, Phil</Author> <Title>Developing Applications with Visual Basic .NET</Title> <Price>45.95</Price> <PublishDate>2005-2-14</PublishDate> </Book> <Book id="bk999"></Book> </Catalog>
Rimuovere un elemento o un attributo da un valore letterale XML.
Per rimuovere un elemento o un attributo da un valore letterale XML, ottenere un riferimento all'elemento o attributo e chiamare il metodo Remove, come illustrato nell'esempio seguente.
For Each book In From element In catalog.<Catalog>.<Book> book.Attributes("genre").Remove() Next For Each book In From element In catalog.<Catalog>.<Book> Where element.@id = "bk999" book.Remove() Next
Di seguito vengono illustrati il codice XML di origine e quello modificato, derivati dall'esempio.
Source XML: <?xml version="1.0"?> <Catalog> <Book id="bk101" genre="Computer" editorEmail="someone@example.com"> <Author>Garghentini, Davide</Author> <Title>XML Developer's Guide</Title> <Price>44.95</Price> </Book> <Book id="bk000"></Book> <Book id="bk331" genre="Computer" editorEmail="someone@example.com"> <Author>Spencer, Phil</Author> <Title>Developing Applications with Visual Basic .NET</Title> <Price>45.95</Price> </Book> <Book id="bk999"></Book> </Catalog> Modified XML: <?xml version="1.0"?> <Catalog> <Book id="bk101" editorEmail="someone@example.com"> <Author>Garghentini, Davide</Author> <Title>XML Developer's Guide</Title> <Price>44.95</Price> </Book> <Book id="bk000"></Book> <Book id="bk331" editorEmail="someone@example.com"> <Author>Spencer, Phil</Author> <Title>Developing Applications with Visual Basic .NET</Title> <Price>45.95</Price> </Book> </Catalog>
Per rimuovere tutti gli elementi o attributi da un valore letterale XML, ottenere un riferimento al valore letterale XML e chiamare il metodo RemoveAll.
Modificare un valore letterale XML
Per modificare il nome di un elemento XML, innanzi tutto ottenere un riferimento all'elemento. È quindi possibile creare un nuovo oggetto XElementche ha un nuovo nome e passa il nuovo oggetto XElement al metodo ReplaceWith dell'oggetto XElement esistente.
Se l'elemento che si sta sostituendo ha sottoelementi che devono essere mantenuti, impostare il valore del nuovo oggetto XElement sulla proprietà Nodes dell'elemento esistente. In tal modo si imposterà il valore del nuovo elemento sull'XML interno dell'elemento esistente. In alternativa, è possibile impostare il valore del nuovo elemento sulla proprietà Value dell'elemento esistente.
Nell'esempio di codice seguente vengono sostituiti tutti gli elementi <Description> con un elemento <Abstract>. Il contenuto dell'elemento <Description> viene mantenuto nel nuovo elemento <Abstract> utilizzando la proprietà Nodes dell'oggetto XElement. di <Description>
For Each desc In From element In catalog.<Catalog>.<Book>.<Description> ' Replace and preserve inner XML. desc.ReplaceWith(<Abstract><%= desc.Nodes %></Abstract>) Next For Each price In From element In catalog.<Catalog>.<Book>.<Price> ' Replace with text value. price.ReplaceWith(<MSRP><%= price.Value %></MSRP>) Next
Di seguito vengono illustrati il codice XML di origine e quello modificato, derivati dall'esempio.
Source XML: <?xml version="1.0"?> <Catalog> <Book id="bk101"> <Author>Garghentini, Davide</Author> <Title>XML Developer's Guide</Title> <Price>44.95</Price> <Description> An in-depth look at creating applications with <technology>XML</technology>. For <audience>beginners</audience> or <audience>advanced</audience> developers. </Description> </Book> <Book id="bk331"> <Author>Spencer, Phil</Author> <Title>Developing Applications with Visual Basic .NET</Title> <Price>45.95</Price> <Description> Get the expert insights, practical code samples, and best practices you need to advance your expertise with <technology>Visual Basic .NET</technology>. Learn how to create faster, more reliable applications based on professional, pragmatic guidance by today's top <audience>developers</audience>. </Description> </Book> </Catalog> Modified XML: <?xml version="1.0"?> <Catalog> <Book id="bk101"> <Author>Garghentini, Davide</Author> <Title>XML Developer's Guide</Title> <MSRP>44.95</MSRP> <Abstract> An in-depth look at creating applications with <technology>XML</technology>. For <audience>beginners</audience> or <audience>advanced</audience> developers. </Abstract> </Book> <Book id="bk331"> <Author>Spencer, Phil</Author> <Title>Developing Applications with Visual Basic .NET</Title> <MSRP>45.95</MSRP> <Abstract> Get the expert insights, practical code samples, and best practices you need to advance your expertise with <technology>Visual Basic .NET</technology>. Learn how to create faster, more reliable applications based on professional, pragmatic guidance by today's top <audience>developers</audience>. </Abstract> </Book> </Catalog>
Vedere anche
Attività
Procedura: caricare XML da un file, da una stringa o da un flusso (Visual Basic)
Concetti
Introduzione a LINQ in Visual Basic