Share via


Procedura: trasformare XML utilizzando LINQ (Visual Basic)

I valori letterali XML semplificano la lettura di XML da un'origine e la trasformazione in un nuovo formato XML. È possibile sfruttare le query LINQ per recuperare il contenuto da trasformare o modificare il contenuto in un documento esistente in un nuovo formato XML.

L'esempio in questo argomento trasforma il contenuto da un documento di origine XML a HTML da visualizzare in un browser.

Nota

I nomi o i percorsi visualizzati per alcuni elementi dell'interfaccia utente di Visual Studio nelle istruzioni seguenti potrebbero essere diversi nel computer in uso. La versione di Visual Studio in uso e le impostazioni configurate determinano questi elementi. Per altre informazioni, vedere Personalizzazione dell'IDE.

Per trasformare un documento XML

  1. In Visual Studio creare un nuovo progetto Visual Basic nel modello di progetto dell'applicazione console.

  2. Fare doppio clic sul file Module1.vb creato nel progetto per modificare il codice Visual Basic. Aggiungere il codice seguente a Sub Main del modulo Module1. Questo codice crea il documento XML di origine come oggetto 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>
    

    Procedura: caricare XML da un file, da una stringa o da un flusso.

  3. Dopo aver creato il codice per creare il documento XML di origine, aggiungere il codice seguente per recuperare tutti gli elementi <Book> dall'oggetto e trasformarli in un documento HTML. L'elenco di elementi <Book> viene creato usando una query LINQ che restituisce una raccolta di oggetti XElement che contengono il codice HTML trasformato. È possibile utilizzare espressioni incorporate per inserire i valori del documento di origine nel nuovo formato XML.

    Il documento HTML risultante viene scritto in un file usando il metodo 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. Dopo Sub Main di Module1, aggiungere un nuovo metodo (Sub) per trasformare un nodo <Descrizione> nel formato HTML specificato. Questo metodo viene chiamato dal codice nel passaggio precedente e viene usato per mantenere il formato degli elementi <Descrizione>.

    Questo metodo sostituisce i sottoelementi dell'elemento <Descrizione> con HTML. Il metodo ReplaceWith viene utilizzato per mantenere la posizione dei sottoelementi. Il contenuto trasformato dell'elemento <Descrizione> è incluso in un elemento di paragrafo HTML (<p>). La proprietà Nodes viene utilizzata per recuperare il contenuto trasformato dell'elemento <Descrizione>. In questo modo si garantisce che i sottoelementi siano inclusi nel contenuto trasformato.

    Aggiungere il codice seguente in Sub Main dopo 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. Salva le modifiche.

  6. Premere F5 per eseguire il codice. Il documento salvato risultante sarà simile al seguente:

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

Vedi anche