JAK: Vyhledání a nahrazení speciálních znaků v souboru XML pomocí jazyka Visual Basic .NET

Microsoft Visual C# .NET verzi tohoto článku naleznete v tématu
316063 .
Microsoft Visual Basic 6.0 verzi tohoto článku naleznete v tématu
251354 .

Souhrn

Tento článek popisuje, jak nahradit zvláštní znaky v souboru jazyka XML (Extensible Markup) pomocí jazyka Visual Basic .NET.

Popis techniky

XML predefines následujících pět odkazů entity speciální znaky, které by jinak interpretován jako součást kód jazyka:




Odkazy na entity a znak můžete použít k návratu levou ostrou závorkou, ampersand a další oddělovače. Můžete také použít číselný znak odkazy; jsou rozbaleny ihned při jejich jsou rozpoznány a jsou považovány za znaková data, takže můžete použít alfanumerické znakové odkazy


Pokud deklarujete některou z následujících dvou entit
  • lt
  • amp
je nutné deklarovat jako vnitřní subjekty, jejichž náhradní text je znak odkaz na příslušný znak (levá úhlová závorka nebo ampersand), který je právě uvozeny; zdvojené uvozovací znaky je nutné tyto entity tak, aby odkazy na ně poskytnout správný výsledek.

Pokud deklarujete některý z následujících tří entit
  • gt
  • APOS
  • quot
je nutné deklarovat jako vnitřní entity, jejichž náhradní text jednoho znaku právě uvozeny.

Zjistit, zda je požadovaný speciální znak nahrazení

Není požadováno: XML soubory ve kterých je načítání dat z databáze

Při použití rozhraní.NET Framework Microsoft data je načten a uložen v objektu DataSet. Při psaní data z množiny DataSet do souboru XML pomocí WriteXml metoda, speciální znaky, které jsou uvedené v části "Souhrn" jsou nahrazeny odkazy příslušných znaků; Když vytváříte soubory XML pomocí objektu DataSet, žádné speciální náhradní proces není tedy třeba.

Požadováno: Soubor XML s speciální znaky

V některých případech soubor XML nebo data XML, které pocházejí ze třetích stran mohou používat tyto speciální znaky; v tomto scénáři data generuje chyby při načítání do XmlDocument objekt nebo objekt XmlReader .

Chybová zpráva je generována při znak:
Došlo k chybě při analýze entity_name, řádek
# #pozice.
kde řádky # a pozice
# představují přesné umístění speciálních znaků.

Při levou ostrou závorkou, dojde k následující chybě:
' <' Znaků, šestnáctková hodnota 0x3C, nelze zahrnout do názvu. Řádek #pozice
#.
V této chybové zprávě, řádek
# a # pozice pozice kde existuje levou ostrou závorku, ale kde je nalezen druhý levou ostrou závorku.

Pokud soubor XML obsahuje pravá úhlová závorka (>), uvozovky (") nebo apostrof ('), tyto jsou zpracovávány objekty XmlDocument a XmlReader protože je vyžadován pro tyto znaky pouze jeden znak nahrazení.

Nahrazení zvláštních znaků

Nahrazení ampersand a levou ostrou závorku znaky:
  1. Vytvořte soubor XML.
  2. Vytvořit aplikaci Visual Basic .NET a potom vložte kód.

Vytvoření souboru XML

Zkopírujte a vložte následující kód do programu Poznámkový blok a uložte soubor jako customers.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>

Vytvořit projekt aplikace Visual Basic .NET

  1. Vytvořte novou aplikaci Windows Visual Basic .NET.
  2. Pomocí operace a přetažení přesunout textové pole, dva ovládací prvky tlačítka a ovládací prvek DataGrid.
  3. Nastavte vlastnost víceřádkové textové pole na hodnotu True.
  4. Importujte následující obory názvů:
    Imports System.XmlImports System.IO
    Imports System.Data.SqlClient

  5. Po následující oddíl
    Inherits System.Windows.Forms.Form
    Zkopírujte a vložte následující ukázka kódu:
     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. Zkopírujte a vložte následující kód v události Click Button1:
    Dim xmldoc As New XmlDocument()        xmldoc = LoadXMLDoc()
    Dim nextnode As XmlNode
    nextnode = xmldoc.FirstChild.NextSibling
    TextBox1.Text = nextnode.OuterXml

  7. Zkopírujte a vložte následující kód do události Click 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. Změňte název serveru, uživatelské jméno a heslo pro připojení k serveru se systémem Microsoft SQL Server.
  9. Sestavte projekt a spusťte jej.
  10. Klepněte na tlačítko Button1.

    Chyby, které obdržíte popis chyb, které jsou vysvětleny v "Požadováno: XML soubor s speciální znaky" části odpovídají. XML data se zobrazí v textové pole; ampersand je nahrazen.
  11. Klepněte na tlačítko Button2.

    V prvku DataGrid firma má ampersand a textové pole zobrazí data XML s

Odkazy

Další informace získáte klepnutím na níže uvedené číslo článku znalostní báze Microsoft Knowledge Base:
251354 jak: vyhledání a nahrazení speciálních znaků v dokumentu XML pomocí jazyka Visual Basic
Vlastnosti

ID článku: 308060 - Poslední kontrola: 20. 1. 2017 - Revize: 1

Váš názor