Comment : transformer du code XML à l'aide de LINQ (Visual Basic)
Les littéraux XML facilitent la lecture du code XML à partir d’une source et le transforment en un nouveau format XML. Vous pouvez tirer parti des requêtes LINQ pour récupérer le contenu à transformer ou modifier le contenu d’un document existant dans un nouveau format XML.
L’exemple de cette rubrique transforme le contenu d’un document source XML en HTML pour l’afficher dans un navigateur.
Notes
Il est possible que pour certains des éléments de l'interface utilisateur de Visual Studio, votre ordinateur affiche des noms ou des emplacements différents de ceux indiqués dans les instructions suivantes. L'édition de Visual Studio dont vous disposez et les paramètres que vous utilisez déterminent ces éléments. Pour plus d’informations, consultez Personnalisation de l’IDE.
Pour transformer un document XML
Dans Visual Studio, créez un projet d'application de bureau Visual Basic à l'aide du modèle de projet d’application de console .
Double-cliquez sur le fichier Module1.vb créé dans le projet pour modifier le code Visual Basic. Ajoutez le code suivant au
Sub Main
du moduleModule1
. Ce code crée le document XML source en tant qu’objet XDocument.Dim catalog = <?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>
Guide pratique : Charger du code XML à partir d'un fichier, d'une chaîne ou d'un flux.
Après le code de création du document XML source, ajoutez le code suivant pour récupérer tous les éléments <Book> de l'objet et les transformer en document HTML. La liste des éléments <Book> est créée à l’aide d’une requête LINQ qui retourne une collection d’objets XElement qui contiennent le code HTML transformé. Vous pouvez utiliser des expressions incorporées pour placer les valeurs du document source dans le nouveau format XML.
Le document HTML résultant est écrit dans un fichier à l’aide de la méthode Save.
Dim htmlOutput = <html> <body> <%= From book In catalog.<Catalog>.<Book> Select <div> <h1><%= book.<Title>.Value %></h1> <h3><%= "By " & book.<Author>.Value %></h3> <h3><%= "Price = " & book.<Price>.Value %></h3> <h2>Description</h2> <%= TransformDescription(book.<Description>(0)) %> <hr/> </div> %> </body> </html> htmlOutput.Save("BookDescription.html")
Après
Sub Main
deModule1
, ajoutez une nouvelle méthode (Sub
) pour transformer un <nœud Description> au format HTML spécifié. Cette méthode est appelée par le code à l’étape précédente et est utilisée pour conserver le format des éléments <Description>.Cette méthode remplace les sous-éléments de l’élément <Description> par du code HTML. La méthode
ReplaceWith
est utilisée pour conserver l’emplacement des sous-éléments. Le contenu transformé de l’élément <Description> est inclus dans un élément paragraphe HTML (<p>). La propriété Nodes est utilisée pour récupérer le contenu transformé de l’élément <Description> . Cela garantit que les sous-éléments sont inclus dans le contenu transformé.Ajoutez le code suivant dans
Sub Main
deModule1
.Public Function TransformDescription(ByVal desc As XElement) As XElement ' Replace <technology> elements with <b>. Dim content = (From element In desc...<technology>).ToList() If content.Count > 0 Then For i = 0 To content.Count - 1 content(i).ReplaceWith(<b><%= content(i).Value %></b>) Next End If ' Replace <audience> elements with <i>. content = (From element In desc...<audience>).ToList() If content.Count > 0 Then For i = 0 To content.Count - 1 content(i).ReplaceWith(<i><%= content(i).Value %></i>) Next End If ' Return the updated contents of the <Description> element. Return <p><%= desc.Nodes %></p> End Function
Enregistrez vos modifications.
Appuyez sur F5 pour exécuter le code. Le document enregistré résultant ressemble à ce qui suit :
<?xml version="1.0"?> <html> <body> <div> <h1>XML Developer's Guide</h1> <h3>By Garghentini, Davide</h3> <h3>Price = 44.95</h3> <h2>Description</h2> <p> An in-depth look at creating applications with <b>XML</b>. For <i>beginners</i> or <i>advanced</i> developers. </p> <hr /> </div> <div> <h1>Developing Applications with Visual Basic .NET</h1> <h3>By Spencer, Phil</h3> <h3>Price = 45.95</h3> <h2>Description</h2> <p> Get the expert insights, practical code samples, and best practices you need to advance your expertise with <b>Visual Basic .NET</b>. Learn how to create faster, more reliable applications based on professional, pragmatic guidance by today's top <i>developers</i>. </p> <hr /> </div> </body> </html>