วิธีการค้นหา และแทนอักขระพิเศษในแฟ้ม XML กับ Visual .NET c#

การแปลบทความ การแปลบทความ
หมายเลขบทความ (Article ID): 316063 - ผลิตภัณฑ์ที่เกี่ยวข้องในบทความนี้
ขยายทั้งหมด | ยุบทั้งหมด

เนื้อหาบนหน้านี้

สรุป

บทความนี้อธิบายวิธีการแทนอักขระพิเศษในแฟ้ม Extensible Markup ภาษา (XML) โดยใช้ Visual .NET c#

คำอธิบายเกี่ยวกับเทคนิค

xml predefines 5 การอ้างเอ็นติตี้อิงสำหรับอักขระพิเศษที่จะมิฉะนั้นจะตีความเป็นส่วนหนึ่งของมาร์กอัปภาษา:

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;


คุณสามารถใช้การอ้างอิงเอ็นติตี้และอักขระ escape วงเล็บมุมซ้าย ampersand และตัวคั่นอื่น ๆ คุณยังสามารถใช้อักขระตัวเลขการอ้างอิง ข้อมูลอ้างอิงของอักขระที่เป็นตัวเลขจะถูกขยายออกทันทีเมื่อพวกเขามีรู้จัก นอกจากนี้ เนื่องจากอักขระตัวเลขการอ้างอิงจะถือว่าเป็นข้อมูลอักขระ คุณสามารถใช้การอ้างอิงของอักขระที่เป็นตัวเลข

ถ้าคุณกำหนดอย่างใดอย่างหนึ่งเอนทิตีที่สองต่อไปนี้:
  • &
คุณต้องกำหนดให้เป็นข้อความแทนซึ่งมีการอ้างอิงอักขระไปเกี่ยวข้องอักขระ (วงเล็บมุมด้านซ้ายหรือ ampersand) ที่จะถูก escaped เอนทิตีภายใน นี้คู่ escaping ไม่จำเป็นสำหรับเอนทิตีเหล่านี้เพื่อให้การอ้างอิงดังกล่าวทำให้ผลลัพธ์ well-formed

ถ้าคุณประกาศใด ๆ ของเอนทิตีที่สามแบบต่อไปนี้:
  • >
  • '
  • "
คุณต้องกำหนดให้เป็นข้อความแทนซึ่งมีอักขระตัวเดียวที่จะถูก escaped เอนทิตีภายใน

ตรวจสอบว่า คุณต้องแทนอักขระพิเศษ

ไม่จำเป็น: แฟ้ม XML ที่ดึงข้อมูลจากฐานข้อมูล

เมื่อคุณใช้ Microsoft .NET Framework ถูกดึงข้อมูล และเก็บไว้ในตัวชุดข้อมูลวัตถุ เมื่อคุณเขียนข้อมูลจากการชุดข้อมูลไปยังแฟ้ม XML โดยใช้การWriteXmlวิธี อักขระพิเศษที่อ้างอิงถึงในส่วน "บทสรุป" จะถูกแทนที่ ด้วยการอ้างอิงของอักขระที่เกี่ยวข้อง ดังนั้น เมื่อคุณเขียนแฟ้ม XML และ ถ้าคุณใช้เป็นชุดข้อมูลไม่มีกระบวนการแทนพิเศษที่จำเป็น

ต้องการ: แฟ้ม XML ที่ประกอบด้วยข้อมูล XML อื่น ๆ ด้วยอักขระพิเศษ

ในบางครั้งแฟ้ม XML หรือข้อมูล XML ที่มาจากบุคคลอื่นอาจใช้อักขระพิเศษเหล่านี้ ในสถานการณ์สมมตินี้ ข้อมูลสร้างข้อผิดพลาดเมื่อคุณโหลดไปXmlDocumentวัตถุ หรือข้อXmlReaderวัตถุ

คุณได้รับข้อความแสดงข้อความแสดงข้อผิดพลาดต่อไปนี้เมื่อมีพบอักขระ ampersand:
ข้อผิดพลาดเกิดขึ้นขณะกำลังแยกวิเคราะห์entity_nameเส้น#ตำแหน่ง#.
ที่บรรทัด#และตำแหน่ง#แสดงตำแหน่งที่แน่นอนของอักขระพิเศษ

คุณได้รับข้อความแสดงข้อความแสดงข้อผิดพลาดต่อไปนี้เมื่อเกิดการวงเล็บมุมซ้าย:
ใน '<' character,="" hexadecimal="" value="" 0x3c,cannot="" be="" included="" in="" a="" name.="" line=""></'>#ตำแหน่ง#.
ในข้อผิดพลาดความนี้ บรรทัด#และตำแหน่ง#ไม่แสดงตำแหน่งที่มีวงเล็บมุมซ้าย แต่ที่พบวงเล็บซ้ายที่สองมุม

ถ้าแฟ้ม XML ที่ประกอบด้วยวงเล็บมุมขวา (>), เครื่องหมายใบเสนอราคาตรง ("), หรือ apostrophe ('), การXmlReaderและXmlDocumentวัตถุที่จัดการวัตถุเหล่านี้ได้เนื่องจากอักขระเหล่านี้ต้องการแทนอักขระตัวเดียวเท่านั้น

แทนอักขระพิเศษ

เมื่อต้องการแทน ampersand และอักขระวงเล็บมุมซ้าย:
  1. สร้างแฟ้ม XML
  2. สร้างโปรแกรมประยุกต์.NET c# Visual และจากนั้น ใส่รหัส

สร้างแฟ้ม 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 .NET c#

  1. สร้างโปรแกรมประยุกต์ Visual c# .NET Windows ใหม่เป็นดังนี้:
    1. เริ่ม Microsoft Visual Studio .NET
    2. ในการแฟ้ม:เมนู ให้ชี้ไปที่ใหม่แล้ว คลิกProject.
    3. ในการโครงการใหม่กล่องโต้ตอบ คลิกแสดงโครงการ c#ภายใต้ชนิดโครงการแล้ว คลิกแอพลิเคชันของ windowsภายใต้แม่แบบ.
  2. ลากตัวกล่องข้อความตัวควบคุม ทั้งสองปุ่มตัวควบคุม และ aDataGridควบคุมจากกล่องเครื่องมือในการเริ่มต้นฟอร์มของคุณ Form1.cs
  3. ตั้งค่านี้multilineคุณสมบัตินี้กล่องข้อความเมื่อต้องการTrue.
  4. นำเข้า namespaces ที่ต่อไปนี้:
    using System.Xml;
    using System.IO;
    using System.Data.SqlClient;
    					
  5. เพิ่มรหัสต่อไปนี้หลังจากหลักฟังก์ชัน:
    string filepath = "C:\\Customers.xml";
    private void ReplaceSpecialChars(long linenumber)
            {
                System.IO.StreamReader strm;
                string strline;
                string strreplace = " ";
                string tempfile = "C:\\Temp.xml";
                try
                {
                    System.IO.File.Copy(filepath,tempfile,true);
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
    
                StreamWriter strmwriter = new StreamWriter(filepath);
                strmwriter.AutoFlush = true;
                strm = new StreamReader(tempfile);
                long i  = 0;
                while (i < linenumber - 1)
                {
                    strline = strm.ReadLine();
                    strmwriter.WriteLine(strline);
                    i = i + 1;
                }
    
                strline = strm.ReadLine();
                Int32 lineposition;
    		
                lineposition = strline.IndexOf("&");
                if (lineposition > 0) 
                {
                    strreplace = "&amp;";
                }
                else
                {
                    lineposition = strline.IndexOf("<",1);
                    if (lineposition > 0 )
                    {
                        strreplace = "<";
                    }
    
                }
                strline = strline.Substring(0, lineposition - 1) + strreplace + strline.Substring(lineposition + 1);
                strmwriter.WriteLine(strline);
    
                strline = strm.ReadToEnd();
                strmwriter.WriteLine(strline);
    
                strm.Close();
                strm = null;
    
                strmwriter.Flush();
                strmwriter.Close();
                strmwriter = null;
    
            }
    		
            public XmlDocument LoadXMLDoc() 
            {
            XmlDocument xdoc;
            long lnum;
    		
            try
            {
                xdoc = new XmlDocument();
                xdoc.Load(filepath);
            }
            catch (XmlException ex)
            {
                MessageBox.Show(ex.Message);
                lnum = ex.LineNumber;
                ReplaceSpecialChars(lnum);
    
                xdoc = LoadXMLDoc();
            }
        return (xdoc);
        }
    					
  6. เพิ่มรหัสต่อไปนี้ไปButton1_Clickเหตุการณ์:
    XmlDocument xmldoc = new XmlDocument();
            xmldoc = LoadXMLDoc();
            XmlNode nextnode; 
            nextnode = xmldoc.FirstChild.NextSibling;
            this.textBox1.Text = nextnode.OuterXml.ToString();
    					
  7. เพิ่มรหัสต่อไปนี้ไปButton2_Clickเหตุการณ์:
    DataSet ds = new DataSet();
                XmlDocument xdoc = new XmlDocument();
                SqlConnection cnNwind = new SqlConnection("Data source=myServerName;user id=myUser;Password=myPassword;Initial catalog=Northwind;");
                SqlDataAdapter daCustomers = new SqlDataAdapter("Select customerid,companyname,contactname, region from customers where region='WY'", cnNwind);
                string filepath = "C:\\Customers.xml";
                try
                {
                    daCustomers.Fill(ds, "Customers");
                    this.dataGrid1.DataSource = ds.Tables["Customers"];
                    ds.WriteXml(filepath);
                    xdoc.Load(filepath);
                    XmlNode nextnode; 
                    nextnode = xdoc.FirstChild.NextSibling;
                    textBox1.Text = nextnode.OuterXml.ToString();
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
    					
  8. เปลี่ยนแปลงคุณสมบัติในนั้นSqlConnectionสายอักขระการเชื่อมต่อตามความจำเป็นสำหรับสภาพแวดล้อมการทำงานของคุณ
  9. สร้าง และเรียกใช้โครงการ
  10. คลิกbutton1.

    ข้อผิดพลาดที่คุณได้รับจะสอดคล้องกับคำอธิบายของข้อผิดพลาดที่ได้อธิบายไว้ในนั้นต้องการ: มีแฟ้ม XML มีอักขระพิเศษส่วน ข้อมูล XML ปรากฏขึ้นในการกล่องข้อความ; ampersand จะถูกแทนที่ด้วย
  11. คลิกButton2.

    ในการDataGridสังเกตว่าcompanynameมีข้อ ampersand และกล่องข้อความแสดงข้อมูล XML ด้วย

ข้อมูลอ้างอิง

สำหรับข้อมูลเพิ่มเติม ให้คลิกหมายเลขบทความต่อไปนี้ เพื่อดูบทความในฐานความรู้ของ Microsoft::
251354วิธีการค้นหา และแทนอักขระพิเศษในเอกสาร XML กับ Visual Basic

คุณสมบัติ

หมายเลขบทความ (Article ID): 316063 - รีวิวครั้งสุดท้าย: 13 มกราคม 2554 - Revision: 5.0
ใช้กับ
  • Microsoft Visual C# .NET 2003 Standard Edition
  • Microsoft Visual C# .NET 2002 Standard Edition
  • Microsoft .NET Framework 1.0
  • Microsoft .NET Framework 1.1
Keywords: 
kbgrpdsmsxml kbhowtomaster kbmsxml kbmt KB316063 KbMtth
แปลโดยคอมพิวเตอร์
ข้อมูลสำคัญ: บทความนี้แปลโดยซอฟต์แวร์การแปลด้วยคอมพิวเตอร์ของ Microsoft แทนที่จะเป็นนักแปลที่เป็นบุคคล Microsoft มีบทความที่แปลโดยนักแปลและบทความที่แปลด้วยคอมพิวเตอร์ เพื่อให้คุณสามารถเข้าถึงบทความทั้งหมดในฐานความรู้ของเรา ในภาษาของคุณเอง อย่างไรก็ตาม บทความที่แปลด้วยคอมพิวเตอร์นั้นอาจมีข้อบกพร่อง โดยอาจมีข้อผิดพลาดในคำศัพท์ รูปแบบการใช้ภาษาและไวยากรณ์ เช่นเดียวกับกรณีที่ชาวต่างชาติพูดผิดเมื่อพูดภาษาของคุณ Microsoft ไม่มีส่วนรับผิดชอบต่อความคลาดเคลื่อน ความผิดพลาดหรือความเสียหายที่เกิดจากการแปลเนื้อหาผิดพลาด หรือการใช้บทแปลของลูกค้า และ Microsoft มีการปรับปรุงซอฟต์แวร์การแปลด้วยคอมพิวเตอร์อยู่เป็นประจำ
ต่อไปนี้เป็นฉบับภาษาอังกฤษของบทความนี้:316063

ให้ข้อเสนอแนะ

 

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