如何: 尋找並且取代 Visual Basic.NET 的 XML 檔案中的特殊字元

文章翻譯 文章翻譯
文章編號: 308060 - 檢視此文章適用的產品。
全部展開 | 全部摺疊

在此頁中

結論

本文將告訴您,如何使用 Visual Basic.NET 取代可延伸標記語言 (XML) 檔案中的特殊字元。

該技巧的描述

XML predefines 特殊字元,否則會被解譯為標記語言的一部分,下列五個實體參考:

Character Name Entity Reference Character Reference Numeric Reference
Ampersand & & &
Left angle bracket &lt; < &#38;#60;
Right angle bracket &gt; > &#62;
Straight quotation mark &quot; " &#39;
Apostrophe &apos; ' &#34;


您可以使用的實體與字元參考來逸出左的角括弧、 將連字號及其他分隔符號。您也可以使用數字字元參照 ; 它們會展開時就會立即被辨認出來,為字元資料中處理,因此您可以使用數字字元參照],立即

如果您會宣告下列兩個實體任一
  • lt
  • 微波
您必須將它們宣告為內部的取代文字位於的個別字元 (向左的角括弧或連字號 (&amp;)) 被逸出字元參考的實體 ; 雙引號的逸出需要為這些實體,讓它們的參考會產生語式正確的結果。

如果您宣告下列三個實體
  • gt
  • apos
  • [
您必須將它們宣告為內部實體的取代文字位於一個被逸出字元。

判斷是否需要特殊的字元取代

非必要: 從一個資料庫會擷取該資料的 XML 檔案

當您使用 Microsoft.NET Framework 時,是擷取資料,而將其儲存在 資料集。當您撰寫資料從 資料集 為 XML 檔案,藉由 WriteXml 方法時,摘要 > 一節中所參考的特殊字元會取代個別字元參考,因此時您正在撰寫 XML 檔案所使用 的資料集, 沒有任何特殊取代處理程序是必要。

您需要: XML 檔案以特殊字元

有時 XML 檔案或 XML 資料,來自協力廠商可能會使用這些特殊字元 ; 在這種情況下資料產生錯誤時您載入到 XmlDocument 物件或 XmlReader 物件。

遇到連字號字元,會產生下列錯誤:
剖析 entity_name,時發生一個錯誤行數 #、 定位 #
其中行數 #,並將 # 代表特殊字元的確切位置。

左的角括弧發生時,就會發生下列錯誤:
在 '<' 字元十六進位值 0x3C,不能包含在一個名稱。線條#, position #.
此錯誤訊息,線條中 ## 未指出位置,左的角括弧存在的地方,但是在遇到第二個左的角括弧的地方的位置。

如果 XML 檔包含右角括弧 (>)、 直線引號 (' ') 或所有格符號 ('),這些由XmlReaderXmlDocument 物件因為只有單一字元取代是必要的這些字元。

取代特殊字元

若要取代連字號 (&amp;) 和左的角括弧字元:
  1. 建立 XML 檔案。
  2. 建立 Visual Basic.NET] 應用程式,然後再插入程式碼。

建立 XML 檔案

複製並貼入 [記事本],貼上下列程式碼,然後將檔案儲存成 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>
				

建立 Visual Basic.NET 專案

  1. 建立新的 Visual Basic.NET Windows 應用程式。
  2. 使用拖曳並放作業移動 文字方塊、 兩個的 按鈕 控制項和 DataGrid
  3. 文字方塊Multiline 屬性設定為 True
  4. 匯入下列命名空間:
    Imports System.Xml
    Imports System.IO
    Imports System.Data.SqlClient
    					
  5. 下列區段
    Inherits System.Windows.Forms.Form
    複製並貼上下列程式碼範例:
     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. 複製,並將下列程式碼貼到 Click 事件的 Button1
    Dim xmldoc As New XmlDocument()
            xmldoc = LoadXMLDoc()
            Dim nextnode As XmlNode
            nextnode = xmldoc.FirstChild.NextSibling
            TextBox1.Text = nextnode.OuterXml
    					
  7. 複製,並將下列程式碼貼到 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. 變更伺服器名稱、 使用者] 名稱和密碼以連線到您正在執行 Microsoft SQL Server 的伺服器。
  9. 建置該專案,然後再執行它。
  10. 按一下 [Button1]。

    您收到的錯誤都"必須有: 一個 XML 檔案與特殊字元 」 一節所述的錯誤描述一致。在 文字方塊 中,則會再顯示 XML 資料 ; 連字號 (&amp;) 會被取代
  11. 按一下 Button2。

    DataGridcompanyname 連字號而 文字方塊 會顯示與 XML 資料

?考

如需詳細資訊按一下面的文件編號,檢視 「 Microsoft 知識庫 」 中的發行項:
251354如何: 尋找並使用 Visual Basic 取代 XML 文件中的特殊字元

屬性

文章編號: 308060 - 上次校閱: 2003年9月3日 - 版次: 3.2
這篇文章中的資訊適用於:
  • Microsoft Visual Basic .NET 2003 Standard Edition
  • Microsoft Visual Basic .NET 2002 Standard Edition
  • Microsoft .NET Framework 1.1
  • Microsoft .NET Framework 1.0
關鍵字:?
kbmt kbgrpdsmsxml kbhowtomaster kbmsxml KB308060 KbMtzh
機器翻譯
重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。
按一下這裡查看此文章的英文版本:308060
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。

提供意見

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com