如何: 查找并替换为 Visual Basic.net 的 XML 文件中的特殊字符

文章翻译 文章翻译
文章编号: 308060 - 查看本文应用于的产品
展开全部 | 关闭全部

本文内容

概要

本文介绍如何使用 Visual Basic.net 替换在可扩展标记语言 (XML) 文件中的特殊字符。

该技术的说明

XML 预定义了以下五个的实体引用,否则会被解释为标记语言的一部分的特殊字符:

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;


可以使用实体和字符引用进行转义左的尖括号、 &amp; 符和其他分隔符。您还可以使用数字字符引用 ; 它们都展开识别它们,这样您就可以使用数字字符引用它们被视为字符数据时立即

如果您声明,则可以下面两个实体的任何一个
  • lt
  • amp
您必须将它们声明为内部实体的替换文字不到各自字符 (左的尖括号或 &amp; 符) 被转义的字符引用,双引号转义不需要为这些实体,以便对它们的引用生成一个格式正确的结果。

如果您声明的任一以下三个实体
  • gt
  • [
  • quot
您必须将它们声明为内部实体的替换文字不在单个字符进行转义。

确定是否需要特殊的字符替换

不需要的: XML 文件中的数据从数据库检索

当使用的 Microsoft.net 框架数据检索并存储在 数据集。当您正在从 数据集 数据写入到 XML 文件,使用 WriteXml 方法时,"摘要"部分中所引用的特殊字符都将替换为相应字符引用 ; 因此时您正在编写 XML 文件,并使用 数据集, 没有特殊替换过程是必需的。

必需: 一个 XML 文件的特殊字符

有时,XML 文件或 XML 数据来自第三方,可能会使用这些特殊字符 ; 在这种情况下数据生成错误时将其加载到 如下 的对象或 XmlReader 对象。

当遇到与符号字符时,会生成以下错误:
分析 entity_name,时发生一个错误行 #,定位 #
在行 # 并定位 # 表示特殊字符的确切位置。

遇到一个左的尖括号时发生以下错误:
在 < 字符的十六进制值 0x3C,不能包含在 $ 名称中。行#, position #.
在此的错误消息在行 ## 并不表明存在左的尖括号,但是遇到第二个左的尖括号位置的位置。

如果 XML 文件包含右尖括号 (&gt;)、 直引号 (") 或撇号 ('),它们由处理在XmlReader如下 的对象由于只有单个字符替换所需的这些字符。

替换特殊字符

若要替换 &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. 使用拖放操作来移动 文本框、 两个的 按钮 控件和一个 数据网格
  3. 文本框多行 属性设置为 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. 复制并将下面的代码粘贴到 Button1Click 事件:
    Dim xmldoc As New XmlDocument()
            xmldoc = LoadXMLDoc()
            Dim nextnode As XmlNode
            nextnode = xmldoc.FirstChild.NextSibling
            TextBox1.Text = nextnode.OuterXml
    					
  7. 复制并粘贴到 Button2Click 事件的下面的代码:
    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。

    DataGrid 中,companyname 有一个 & 符,以及 文本框 显示 XML 数据

参考

有关更多的信息请单击下面文章编号,以查看 Microsoft 知识库中相应的文章:
251354如何: 查找并替换为 Visual Basic 的 XML 文档中的特殊字符

属性

文章编号: 308060 - 最后修改: 2003年9月3日 - 修订: 3.2
这篇文章中的信息适用于:
  • Microsoft Visual Basic .NET 2003 标准版
  • Microsoft Visual .NET 2002 标准版
  • Microsoft .NET Framework 1.1
  • Microsoft .NET Framework 1.0
关键字:?
kbmt kbgrpdsmsxml kbhowtomaster kbmsxml KB308060 KbMtzh
机器翻译
注意:这篇文章是由无人工介入的微软自动的机器翻译软件翻译完成。微软很高兴能同时提供给您由人工翻译的和由机器翻译的文章, 以使您能使用您的语言访问所有的知识库文章。然而由机器翻译的文章并不总是完美的。它可能存在词汇,语法或文法的问题,就像是一个外国人在说中文时总是可能犯这样的错误。虽然我们经常升级机器翻译软件以提高翻译质量,但是我们不保证机器翻译的正确度,也不对由于内容的误译或者客户对它的错误使用所引起的任何直接的, 或间接的可能的问题负责。
点击这里察看该文章的英文版: 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