Πώς μπορείτε να εντοπίσετε και να αντικαταστήσετε ειδικούς χαρακτήρες σε ένα αρχείο XML με Visual C# .NET

Μεταφράσεις άρθρων Μεταφράσεις άρθρων
Αναγν. άρθρου: 316063 - Δείτε τα προϊόντα στα οποία αναφέρεται το συγκεκριμένο άρθρο.
Ανάπτυξη όλων | Σύμπτυξη όλων

Σε αυτήν τη σελίδα

Περίληψη

Αυτό το άρθρο περιγράφει πώς μπορείτε να αντικαταστήσετε ειδικούς χαρακτήρες σε ένα αρχείο Extensible Markup Language (XML), χρησιμοποιώντας το Visual C# .NET.

Η τεχνική περιγραφή

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;


Μπορείτε να χρησιμοποιήσετε αναφορές οντότητας και χαρακτήρων για να βγείτε την αριστερή αγκύλη, το εμπορικό "και" και άλλα διαχωριστικά. Μπορείτε επίσης να χρησιμοποιήσετε αναφορές αριθμητικών χαρακτήρων. Αναφορές αριθμητικών χαρακτήρων αναπτύσσονται αμέσως μόλις αυτά αναγνωρίζονται. Επιπλέον, επειδή οι αναφορές αριθμητικών χαρακτήρων αντιμετωπίζονται ως δεδομένα χαρακτήρων, μπορείτε να χρησιμοποιήσετε τις αναφορές αριθμητικών χαρακτήρων

Εάν δηλώσετε οποιαδήποτε από τις ακόλουθες δύο οντότητες:
  • &amp;
πρέπει να δηλώσετε τους ως εσωτερική οντότητες, του οποίου το κείμενο αντικατάστασης είναι μια αναφορά χαρακτήρα στο αντίστοιχο χαρακτήρα (η αριστερή αγκύλη ή το εμπορικό "και") που έχει την διαφυγής. Αυτή η διπλή escaping είναι απαραίτητη για αυτές τις οντότητες ώστε οι αναφορές τους παράγουν ένα αποτέλεσμα καλοσχεδιασμένο.

Εάν δηλώσετε οποιαδήποτε από τις ακόλουθες τρεις οντότητες:
  • >
  • '
  • "
πρέπει να δηλώσετε τους ως εσωτερική οντότητες, του οποίου το κείμενο αντικατάστασης είναι το μονό χαρακτήρα που έχει την διαφυγής.

Προσδιορίστε εάν πρέπει να αντικαταστήσετε έναν ειδικό χαρακτήρα

Δεν απαιτείται: το αρχείο XML με την οποία γίνεται η ανάκτηση των δεδομένων από μια βάση δεδομένων

Όταν χρησιμοποιείτε το Microsoft .NET Framework, δεδομένα ανακτώνται και αποθηκεύεται σε έναΤο DataSetObject. Όταν γράφετε δεδομένα από έναΤο DataSetσε ένα αρχείο XML, χρησιμοποιώντας τοWriteXmlμέθοδος, οι ειδικοί χαρακτήρες που αναφέρονται στην ενότητα "Περίληψη" αντικαθίστανται από τις αναφορές χαρακτήρων αντίστοιχα. Επομένως, κατά την εγγραφή αρχείων XML και αν χρησιμοποιείτε έναΤο DataSet, απαιτείται καμία διαδικασία ειδικών αντικατάστασης.

Απαιτείται: Αρχείο XML που περιέχει δεδομένα XML άλλου κατασκευαστή με ειδικούς χαρακτήρες

Μερικές φορές το αρχείο XML ή τα δεδομένα XML που προέρχεται από κάποιον τρίτο ενδέχεται να χρησιμοποιήσετε αυτούς τους ειδικούς χαρακτήρες. Σε αυτό το σενάριο, τα δεδομένα δημιουργεί σφάλματα κατά τη φόρτωση του σε έναXmlDocumentτο αντικείμενο ή έναXmlReaderObject.

Όταν παρουσιαστεί το χαρακτήρα εμπορικού "και", λαμβάνετε το ακόλουθο μήνυμα λάθους:
Παρουσιάστηκε σφάλμα κατά την ανάλυσηentity_nameΓραμμή#θέση του#.
όπου#και θέση#αντιπροσωπεύει την ακριβή θέση ενός ειδικού χαρακτήρα.

Όταν παρουσιαστεί μια αριστερή αγκύλη, λαμβάνετε το ακόλουθο μήνυμα λάθους:
Το '<' character,="" hexadecimal="" value="" 0x3c,cannot="" be="" included="" in="" a="" name.="" line=""></'>#θέση του#.
Σε αυτό το μήνυμα λάθους, η γραμμή#και θέση#δεν υποδηλώνουν τη θέση όπου υπάρχει η αριστερή αγκύλη, αλλά όπου εντοπίζεται το δεύτερο αριστερή αγκύλη.

Εάν το αρχείο XML περιέχει μια δεξιά αγκύλη (&gt;), απλά εισαγωγικά ('') ή μια απόστροφο ('), τοXmlReaderκαι τοXmlDocumentαντικείμενα χειρισμού αυτών των αντικειμένων, επειδή αυτοί οι χαρακτήρες απαιτούν μόνο το μεμονωμένο χαρακτήρα αντικατάστασης.

Αντικατάσταση ειδικών χαρακτήρων

Για να αντικαταστήσετε το σύμβολο και οι χαρακτήρες αριστερή αγκύλη:
  1. Δημιουργήστε το αρχείο XML.
  2. Δημιουργήστε την εφαρμογή Visual C# .NET και, στη συνέχεια, εισαγάγετε τον κωδικό.

Δημιουργία αρχείου XML

Αντιγράψτε και επικολλήστε τον παρακάτω κώδικα στο Σημειωματάριο (Notepad) και, στη συνέχεια, αποθηκεύστε το αρχείο ως 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 C# .NET

  1. Δημιουργήστε μια νέα εφαρμογή Visual C# .NET Windows ως εξής:
    1. Ξεκινήστε το Microsoft Visual Studio .NET.
    2. Στο διακομιστήFILEμενού, σημείοΝέα, και στη συνέχεια κάντε κλικ στο κουμπίΤο έργο.
    3. ΣτοΝέο έργοπαράθυρο διαλόγου, κάντε κλικ στο κουμπίΤο Visual C# έργαunderΤύποι έργου, και στη συνέχεια κάντε κλικ στο κουμπίΕφαρμογή των WindowsunderΠρότυπα.
  2. Σύρετε έναΠλαίσιο κειμένουστοιχείο ελέγχου, δύοΚουμπίτα στοιχεία ελέγχου, και έναΤο DataGridελέγχου από την εργαλειοθήκη για την προεπιλεγμένη φόρμα Form1.cs.
  3. Ορισμός τουMultilineη ιδιότητα από τοΠλαίσιο κειμένουToTrue.
  4. Εισαγάγετε τα παρακάτω πεδία ονομάτων:
    using System.Xml;
    using System.IO;
    using System.Data.SqlClient;
    					
  5. Προσθέστε τον ακόλουθο κώδικα μετά τοΚύριοςFunction:
    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 με τοΠλαίσιο κειμένου; the ampersand is replaced with
  11. Κάντε κλικButton2.

    ΣτοΤο DataGrid, notice thatcompanynamehas an ampersand and that theΠλαίσιο κειμένουdisplays the XML data with

Αναφορές

Για πρόσθετες πληροφορίες, κάντε κλικ στον αριθμό του άρθρου παρακάτω, για να προβάλετε το άρθρο της Γνωσιακής Βάσης της Microsoft (Knowledge Base):
251354How to locate and replace special characters in an XML document with Visual Basic

Ιδιότητες

Αναγν. άρθρου: 316063 - Τελευταία αναθεώρηση: Τρίτη, 21 Δεκεμβρίου 2010 - Αναθεώρηση: 2.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
Λέξεις-κλειδιά: 
kbgrpdsmsxml kbhowtomaster kbmsxml kbmt KB316063 KbMtel
Μηχανικά μεταφρασμένο
ΣΗΜΑΝΤΙΚΟ: Αυτό το άρθρο είναι προϊόν λογισμικού μηχανικής μετάφρασης της 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