Delen via


Procedure: XML transformeren met LINQ (Visual Basic)

MET XML-letterlijke gegevens kunt u XML eenvoudig lezen van één bron en transformeren naar een nieuwe XML-indeling. U kunt gebruikmaken van LINQ-query's om de inhoud op te halen die moet worden getransformeerd of inhoud in een bestaand document te wijzigen in een nieuwe XML-indeling.

In het voorbeeld in dit onderwerp wordt inhoud van een XML-brondocument omgezet in HTML die in een browser moet worden weergegeven.

Opmerking

Mogelijk worden op uw computer verschillende namen of locaties weergegeven voor sommige elementen van de Visual Studio-gebruikersinterface in de volgende instructies. De Visual Studio-editie die u hebt en de instellingen die u gebruikt, bepalen deze elementen. Zie Personalizing the IDEvoor meer informatie.

Een XML-document transformeren

  1. Maak in Visual Studio een nieuw Visual Basic-project in de Console Application-sjabloon.

  2. Dubbelklik op het Module1.vb bestand dat in het project is gemaakt om de Visual Basic-code te wijzigen. Voeg de volgende code toe aan de Sub MainModule1 module. Met deze code maakt u het XML-brondocument als een XDocument object.

    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>
    

    Procedure: XML laden vanuit een bestand, tekenreeks of stream.

  3. Voeg na de code voor het maken van het XML-brondocument de volgende code toe om alle <Book> elementen van het object op te halen en te transformeren in een HTML-document. De lijst <Book> met elementen wordt gemaakt met behulp van een LINQ-query die een verzameling XElement objecten retourneert die de getransformeerde HTML bevatten. U kunt ingesloten expressies gebruiken om de waarden uit het brondocument in de nieuwe XML-indeling te plaatsen.

    Het resulterende HTML-document wordt met behulp van de Save methode naar een bestand geschreven.

    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. Voeg na Sub Main van Module1 een nieuwe methode (Sub) toe om een <Description>-knooppunt om te zetten in de opgegeven HTML-indeling. Deze methode wordt aangeroepen door de code in de vorige stap en wordt gebruikt om de indeling van de <Description> elementen te behouden.

    Deze methode vervangt subelementen van het <Description> element door HTML. De ReplaceWith methode wordt gebruikt om de locatie van de subelementen te behouden. De getransformeerde inhoud van het <Description> element wordt opgenomen in een HTML-alineaelement (<p>). De Nodes eigenschap wordt gebruikt om de getransformeerde inhoud van het <Description> element op te halen. Dit zorgt ervoor dat subelementen worden opgenomen in de getransformeerde inhoud.

    Voeg de volgende code toe na Sub MainModule1.

    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. Sla uw wijzigingen op.

  6. Druk op F5 om de code uit te voeren. Het resulterende opgeslagen document ziet er ongeveer als volgt uit:

    <?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>
    

Zie ook