Как найти и замена специальных символов в XML-файл с помощью Visual C#.NET

Переводы статьи Переводы статьи
Код статьи: 316063 - Vizualiza?i produsele pentru care se aplic? acest articol.
Развернуть все | Свернуть все

В этой статье

Аннотация

В данной статье описывается, как замена специальных символов в XML-файле с помощью Visual C#.NET.

Описание приема

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;
необходимо объявить их как внутренние объекты, чьи замещающего текста используется ссылка на символы, соответствующие знак (левой угловой скобки или амперсанда), который является обнаруживаются. Двойные экранирования является обязательным для этих сущностей, таким образом, ссылки на них получить правильный результат.

Если объявить любой из трех следующих объектов:
  • >
  • "
  • "
необходимо объявить их как внутренние сущности, чьи заменяющий текст является одним знаком, который является обнаруживаются.

Определить, будет ли необходимо заменить специальный символ

Необязательно: XML-файл, в котором данные извлекаются из базы данных

При использовании Microsoft.NET Framework, данные извлекаются и сохраняются в Набор данных объект. При записи данных из Набор данных в XML-файл с помощью WriteXml метод, специальные символы, которые упоминаются в разделе «Аннотация» заменяются на ссылки на соответствующие символы. Таким образом при записи XML-файлы, и при использовании Набор данных, процесс замены специальных не требуется.

Требуется: XML-файл, содержащий XML-данные независимых производителей со специальными символами

Иногда XML-файл или XML-данные, поступающие от третьей стороны могут использовать эти специальные знаки. В этом случае данные выдает ошибки при загрузке в Объект XmlDocument объект или XmlReader объект.

Когда встречается символ амперсанда появляется следующее сообщение об ошибке:
Произошла ошибка при синтаксическом анализе entity_name, строки #, должность #.
искать # и положение # представляют собой точное положение специальный символ.

При обнаружении левой угловой скобки появляется следующее сообщение об ошибке:
"<' character,="" hexadecimal="" value="" 0x3c,cannot="" be="" included="" in="" a="" name.=""></'> #, должность #.
В этом сообщении об ошибке строки # и положение # Указывает место, где существует левой угловой скобки, но где встречается второй левой угловой скобки.

Если XML-файл содержит правой угловой скобкой (&gt;), прямые кавычки (") или апостроф (') XmlReader и Объект XmlDocument объекты обрабатывать эти объекты, поскольку эти символы требуется только для замены одного символа.

Замена специальных символов

Чтобы заменить амперсанд и левой угловой скобки символов:
  1. Создание XML-файла.
  2. Создание Visual C#.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 C#.NET проект

  1. Создание нового Visual C#.NET приложения Windows следующим образом:
    1. Запустите Microsoft Visual Studio.NET.
    2. На Файл Выберите пункт Новый, а затем нажмите кнопку Проект.
    3. В Новый проект диалоговое окно, нажмите кнопку Проекты Visual C# Из списка Типы проектов, а затем нажмите кнопку Приложение Windows Из списка Шаблоны.
  2. Перетаскивание Текстовое поле элемент управления, два Кнопка элементы управления и DataGrid элемента управления из панели элементов на форму по умолчанию Form1.cs.
  3. Установка Многострочный свойства элемента Текстовое поле Кому Значение true.
  4. Импортируйте следующие пространства имен:
    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 отображаются в Текстовое поле; заменить амперсанд
  11. Нажмите кнопку Button2.

    В DataGrid, обратите внимание, что имя_компании знак амперсанда, а, Текстовое поле Отображение XML-данных с

Ссылки

Для получения дополнительных сведений щелкните следующий номер статьи базы знаний Майкрософт:
251354Поиск и замена специальных символов в документ XML с помощью Visual Basic

Свойства

Код статьи: 316063 - Последний отзыв: 7 июня 2011 г. - Revision: 4.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 KbMtru
Переведено с помощью машинного перевода
ВНИМАНИЕ! Перевод данной статьи был выполнен не человеком, а с помощью программы машинного перевода, разработанной корпорацией Майкрософт. Корпорация Майкрософт предлагает вам статьи, переведенные как людьми, так и средствами машинного перевода, чтобы у вас была возможность ознакомиться со статьями базы знаний KB на родном языке. Однако машинный перевод не всегда идеален. Он может содержать смысловые, синтаксические и грамматические ошибки, подобно тому как иностранец делает ошибки, пытаясь говорить на вашем языке. Корпорация Майкрософт не несет ответственности за неточности, ошибки и возможный ущерб, причиненный в результате неправильного перевода или его использования. Корпорация Майкрософт также часто обновляет средства машинного перевода.
Эта статья на английском языке: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