Partager via


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

  1. Dans Visual Studio, créez un projet d'application de bureau Visual Basic à l'aide du modèle de projet d’application de console .

  2. 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 module Module1. 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.

  3. 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")
    
  4. Après Sub Main de Module1, 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 de Module1.

    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
    
  5. Enregistrez vos modifications.

  6. 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>
    

Voir aussi