Condividi tramite


Procedura: Trasformare XML tramite 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.

Annotazioni

Il computer potrebbe visualizzare nomi o percorsi diversi per alcuni degli elementi dell'interfaccia utente di Visual Studio nelle istruzioni seguenti. L'edizione di Visual Studio disponibile e le impostazioni usate 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 Applicazione console .

  2. Fare doppio clic sul file Module1.vb creato nel progetto per modificare il codice Visual Basic. Aggiungere il codice seguente al Sub Main del Module1 modulo. Questo codice crea il documento XML di origine come XDocument oggetto .

    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, una stringa o 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 XElement oggetti 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 Save metodo .

    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 , Module1aggiungere un nuovo metodo (Sub) per trasformare un <nodo Description> nel formato HTML specificato. Questo metodo viene chiamato dal codice nel passaggio precedente e viene usato per mantenere il formato degli <elementi Description> .

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

    Aggiungere il codice seguente dopo Sub Main di 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. Salvare 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>
    

Vedere anche