Gewusst wie: Transformieren von XML unter Verwendung von LINQ (Visual Basic)
XML-Literale erleichtern das Lesen von XML aus einer Quelle und die Transformation in ein neues XML-Format. Sie können LINQ-Abfragen nutzen, um den umzuwandelnden Inhalt abzurufen oder den Inhalt eines vorhandenen Dokuments in ein neues XML-Format zu ändern.
Im Beispiel in diesem Artikel wird der Inhalt eines XML-Quelldokuments in HTML umgewandelt, damit er in einem Browser angezeigt werden kann.
Hinweis
Auf Ihrem Computer werden möglicherweise andere Namen oder Speicherorte für die Benutzeroberflächenelemente von Visual Studio angezeigt als die in den folgenden Anweisungen aufgeführten. Diese Elemente sind von der jeweiligen Visual Studio-Version und den verwendeten Einstellungen abhängig. Weitere Informationen finden Sie unter Personalisieren der IDE.
So transformieren Sie ein XML-Dokument
Erstellen Sie in Visual Studio mithilfe der Projektvorlage Konsolenanwendung ein neues Visual Basic-Projekt.
Klicken Sie doppelt auf die im Projekt erstellte Datei „Module1.vb“, um den Visual Basic-Code zu ändern. Fügen Sie dem
Sub Main
desModule1
-Moduls den folgenden Code hinzu. Dieser Code erstellt das XML-Quelldokument als XDocument-Objekt.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>
Laden von XML aus einer Datei, einer Zeichenfolge oder einem Stream
Fügen Sie nach dem Code zum Erstellen des XML-Quelldokuments den folgenden Code hinzu, um alle <Book>-Elemente aus dem Objekt abzurufen und sie in ein HTML-Dokument zu transformieren. Die Liste der <Book>-Elemente wird mithilfe einer LINQ-Abfrage erstellt, die eine Sammlung von XElement-Objekten zurückgibt, die den transformierten HTML-Code enthalten. Sie können eingebettete Ausdrücke verwenden, um die Werte aus dem Quelldokument im neuen XML-Format zu platzieren.
Das resultierende HTML-Dokument wird mithilfe der Save-Methode in eine Datei geschrieben.
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")
Fügen Sie nach
Sub Main
vonModule1
eine neue Methode (Sub
) ein, um einen <Description>-Knoten in das angegebene HTML-Format zu transformieren. Diese Methode wird vom Code im vorherigen Schritt aufgerufen und wird verwendet, um das Format der <Description>-Elemente zu erhalten.Diese Methode ersetzt Unterelemente des <Description>-Elements durch HTML. Die
ReplaceWith
-Methode wird verwendet, um die Position der Unterelemente beizubehalten. Der transformierte Inhalt des <Description>-Elements ist in einem HTML-Absatzelement (<p>) enthalten. Die Nodes-Eigenschaft wird verwendet, um den transformierten Inhalt des <Description>-Elements abzurufen. Dadurch wird sichergestellt, dass Unterelemente im transformierten Inhalt enthalten sind.Fügen Sie den folgenden Code nach
Sub Main
vonModule1
ein.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
Speichern Sie die Änderungen.
Drücken Sie F5, um den Code auszuführen. Das resultierende gespeicherte Dokument sieht wie folgt aus:
<?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>