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.
Notitie
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 IDE (Personalizing the IDE) voor meer informatie.
Een XML-document transformeren
Maak in Visual Studio een nieuw Visual Basic-project in de sjabloon consoletoepassingsproject .
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 Main
Module1
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.
Voeg na de code voor het maken van het XML-brondocument de volgende code toe om alle <boekelementen> van het object op te halen en te transformeren in een HTML-document. De lijst <met Book-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")
Voeg daarna
Sub Main
een nieuwe methode (Sub
) toe om een <beschrijvingsknooppunt> te transformeren in de opgegeven HTML-indeling.Module1
Deze methode wordt aangeroepen door de code in de vorige stap en wordt gebruikt om de indeling van de <beschrijvingselementen> te behouden.Deze methode vervangt subelementen van het <element Description> door HTML. De
ReplaceWith
methode wordt gebruikt om de locatie van de subelementen te behouden. De getransformeerde inhoud van het <element Beschrijving> is opgenomen in een HTML-alineaelement (<p>). De Nodes eigenschap wordt gebruikt om de getransformeerde inhoud van het <element Beschrijving> op te halen. Dit zorgt ervoor dat subelementen worden opgenomen in de getransformeerde inhoud.Voeg de volgende code toe na
Sub Main
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
Sla uw wijzigingen op.
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>