Estás trabajando sin conexión, espera a que vuelva la conexión a Internet

CÓMO: Encontrar y sustituir caracteres especiales en un archivo XML mediante Visual Basic .NET

Resumen
En este artículo se describe cómo utilizar Visual Basic .NET para sustituir caracteres especiales en un archivo de Lenguaje de marcado extensible (XML, Extensible Markup Language).

Volver al principio

Descripción de la técnica

XML predefine las cinco referencias de entidades descritas a continuación para los caracteres especiales que de otra forma se interpretarían como parte del lenguaje de marcas:

Nombre del carácterReferencia de entidadReferencia de carácterReferencia numérica
Y comercial&&&
Abrir corchete angular&lt;<&#38;#60;
Cerrar corchete angular&gt;>&#62;
Comilla recta&quot;"&#39;
Apóstrofo&apos;'&#34;


Es posible utilizar las referencias a entidades y caracteres para mostrar los corchetes angulares de apertura y cierre, la Y comercial y otros delimitadores. También puede utilizar referencias numéricas a los caracteres, ya que se convierten en cuanto son reconocidas y se tratan como datos de caracteres

Si declara cualquiera de las dos entidades indicadas a continuación:
  • lt
  • amp
tendrá que hacerlo como entidades internas cuyo texto de sustitución es una referencia de carácter al carácter correspondiente (la comilla angular de apertura o la Y comercial) que se desea mostrar; para que las referencias a estas entidades produzcan un resultado bien formado es necesario duplicar la secuencia de escape utilizada.

Si declara cualquiera de las tres entidades indicadas a continuación:
  • gt
  • apos
  • quot
deberá hacerlo como entidades internas cuyo texto de sustitución sea únicamente el carácter para el que hay que utilizar la secuencia de escape.

Volver al principio

Determinar si es necesario sustituir un carácter especial

No es necesario: Archivos XML en los que los datos se obtienen de una base de datos

Si utiliza Microsoft .NET Framework, los datos se recuperan y almacenan en un Conjunto de datos. Al escribir en un archivo XML los datos de un Conjunto de datos mediante el método WriteXml, los caracteres especiales mencionados en la sección "Resumen" se sustituyen por las referencias de carácter correspondientes; por tanto, no es necesario realizar sustituciones especiales si se escriben archivos XML con información obtenida de un Conjunto de datos.

Volver al principio

Necesario: un archivo XML con caracteres especiales

En ocasiones, el archivo o los datos XML provienen de un tercero que podría utilizar caracteres especiales. En este caso, los datos generarán errores al cargarse en un objeto XmlDocument o en un objeto XmlReader.

Cuando se encuentra el carácter de Y comercial aparece el siguiente error:
Error al analizar nombreDeEntidad, línea , posición .
donde línea y posición representan la posición exacta del carácter especial.

Cuando se encuentra un corchete angular de apertura aparece el siguiente error:
El carácter '<', valor hexadecimal 0x3C, no puede incluirse en un nombre. Línea , posición .
En este mensaje de error, la línea y la posición no indican la posición en la que el corchete izquierdo existe, sino en la que se encuentra el segundo corchete izquierdo.

Si el archivo XML contiene un corchete angular de cierre (>), un carácter de comillas rectas (") o un apóstrofe ('), los objetos XmlReader y XmlDocument los aceptarán, ya que para ellos únicamente es necesario realizar la sustitución de un carácter.

Volver al principio

Sustituir los caracteres especiales

Para remplazar los caracteres Y comercial y corchete angular de apertura:
  1. Cree el archivo XML.
  2. Cree la aplicación de Visual Basic .NET e inserte el código.
Volver al principio

Crear el archivo XML

Copie el siguiente código, péguelo en el Bloc de notas y, a continuación, guarde el archivo como clientes.xml:
<?xml version="1.0" standalone="yes"?><Customers><Customer><CustomerID>BLAUS</CustomerID><CompanyName>Blauer See Delikatessen</CompanyName><ContactName>Hanna Moos</ContactName><Region>test<ing</Region></Customer><Customer><CustomerID>SPLIR</CustomerID><CompanyName>Split Rail Beer & Ale</CompanyName><ContactName>Art raunschweiger</ContactName><Region>WY</Region></Customer></Customers>				
Volver al principio

Crear un proyecto de Visual Basic .NET

  1. Cree una nueva aplicación para Windows de Visual Basic .NET.
  2. Utilice la función arrastrar y soltar para mover un control TextBox, dos controles Button y un control DataGrid.
  3. Configure la propiedad Multiline del control TextBox como True.
  4. Importe los siguientes espacios de nombres:
    Imports System.XmlImports System.IOImports System.Data.SqlClient					
  5. Después de la siguiente sección
    Inherits System.Windows.Forms.Form
    copie y pegue el siguiente ejemplo de código:
     Dim filepath As String = "C:\customers.xml"Private Sub ReplaceSpecialChars(ByVal linenumber As Long)        Dim strm As StreamReader        Dim strline As String        Dim strreplace As String        Dim tempfile As String = "C:\temp.xml"        Try            FileCopy(filepath, tempfile)        Catch ex As Exception            MessageBox.Show(ex.Message)        End Try        Dim strmwriter As New StreamWriter(filepath)        strmwriter.AutoFlush = True        strm = New StreamReader(tempfile)        Dim i As Long = 0        While i < linenumber - 1            strline = strm.ReadLine            strmwriter.WriteLine(strline)            i = i + 1        End While        strline = strm.ReadLine        Dim lineposition As Int32        lineposition = InStr(strline, "")        If lineposition > 0 Then            strreplace = "&amp;"        Else            lineposition = InStr(2, strline, "<")            If lineposition > 0 Then                strreplace = "<"            End If        End If        strline = Mid(strline, 1, lineposition - 1) + strreplace + Mid(strline, lineposition + 1)        strmwriter.WriteLine(strline)        strline = strm.ReadToEnd        strmwriter.WriteLine(strline)        strm.Close()        strm = Nothing        strmwriter.Flush()        strmwriter.Close()        strmwriter = Nothing    End Sub    Public Function LoadXMLDoc() As XmlDocument        Dim xdoc As XmlDocument        Dim lnum As Long        Dim pos As Long        Dim Newxml As String        Try            xdoc = New XmlDocument()            xdoc.Load(filepath)        Catch ex As XmlException            MessageBox.Show(ex.Message)            lnum = ex.LineNumber            ReplaceSpecialChars(lnum)            xdoc = LoadXMLDoc()        End Try        Return (xdoc)    End Function					
  6. Copie el siguiente código y péguelo en el evento Click del control Button1:
    Dim xmldoc As New XmlDocument()        xmldoc = LoadXMLDoc()        Dim nextnode As XmlNode        nextnode = xmldoc.FirstChild.NextSibling        TextBox1.Text = nextnode.OuterXml					
  7. Copie el siguiente código y péguelo en el evento Click del control Button2:
    Dim ds As New DataSet()        Dim xdoc As New XmlDocument()        Dim cnNwind As New SqlConnection("Data source=myservername;user id=myuser;Password=mypassword;Initial catalog=Northwind;")        Dim daCustomers As New SqlDataAdapter("Select customerid,companyname,contactname, region from customers where region='WY'", cnNwind)        Dim filepath As String        Try            daCustomers.Fill(ds, "Customers")            DataGrid1.DataSource = ds.Tables(0)            ds.WriteXml("C:\Dataset.xml")            xdoc.Load("C:\Dataset.xml")            Dim nextnode As XmlNode            nextnode = xdoc.FirstChild.NextSibling            TextBox1.Text = nextnode.OuterXml.ToString        Catch ex As Exception            MessageBox.Show(ex.Message)        End Try					
  8. Cambie los valores correspondiente al nombre del servidor y el nombre de usuario y la contraseña que utilice para conectarse al servidor que ejecuta Microsoft SQL Server.
  9. Genere el proyecto y ejecútelo.
  10. Haga clic en Button1.

    Los errores que recibe son los mismos que se explican en la sección "Necesario: un archivo XML con caracteres especiales". A continuación, los datos XML se muestran en el control TextBox; el carácter Y comercial es sustituido por
  11. Haga clic en Button2.

    En el control DataGrid, companyname incluye un carácter Y comercial, y el control TextBox muestra los datos XML con
Volver al principio
Referencias
Para obtener información adicional, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
251354 CÓMO: Buscar y sustituir caracteres especiales en un documento XML con Visual Basic
Volver al principio
Propiedades

Id. de artículo: 308060 - Última revisión: 04/23/2007 15:32:00 - Revisión: 3.1

  • Microsoft Visual Basic .NET 2003 Standard Edition
  • Microsoft Visual Basic .NET 2002 Standard Edition
  • Microsoft .NET Framework 1.1
  • Microsoft .NET Framework 1.0
  • kbhowtomaster kbmsxml kbgrpdsmsxml KB308060
Comentarios