Vyhledání a nahrazení speciálních znaků v souboru XML pomocí Visual C# .NET

Souhrn

Tento článek popisuje, jak nahradit zvláštní znaky v souboru jazyka XML (Extensible Markup) pomocí aplikace Visual C# .NET.

zpět na horní

Popis techniky

XML predefines následujících pět odkazů entity speciální znaky, které by jinak interpretován jako součást kód jazyka:



Odkazy na entity a znak můžete použít k návratu levou ostrou závorkou, ampersand a další oddělovače. Také můžete použít alfanumerické znakové odkazy. Alfanumerické znakové odkazy jsou rozbaleny ihned při jejich jsou rozpoznány. Kromě toho protože alfanumerické znakové odkazy jsou považovány za znaková data, můžete použít alfanumerické znakové odkazy

Pokud deklarujete buď následující dvě entity:
  • <
  • & amp;
musíte deklarovat jako vnitřní subjekty, jejichž náhradní text je znak odkaz na příslušný znak (levá úhlová závorka nebo ampersand), který je řídícími znaky. Toto zdvojené uvozovací znaky je nutné tyto entity tak, aby odkazy na ně poskytnout správný výsledek.

Pokud deklarujete některý z následujících tří entit:
  • >
  • & apos;
  • & quot;
musí deklarovat jako vnitřní subjekty, jejichž náhradní text je jeden znak, který je právě uvozeny.

zpět na horní

Určit, zda je třeba nahradit speciální znak

Není požadováno: XML soubor, ve kterém je načítání dat z databáze

Při použití rozhraní.NET Framework Microsoft data načtena a je uložen v objektu DataSet . Při zápisu dat z objekt DataSet do souboru XML pomocí WriteXml metoda, speciální znaky, které jsou uvedené v části "Souhrn" jsou nahrazeny odkazy příslušných znaků. Při zápisu souborů XML a použít objekt DataSet, žádné speciální náhradní proces není tedy třeba.

zpět na horní

Požadováno: XML soubor, který obsahuje data XML pro třetí strany se speciálními znaky

Soubor XML nebo data XML, která pochází ze třetí strany může někdy používat tyto speciální znaky. V tomto scénáři data generuje chyby při načítání do XmlDocument objekt nebo objekt XmlReader .

Při znak se zobrazí následující chybová zpráva:
Došlo k chybě při analýze entity_name, řádek # #pozice.
kde řádky # a # pozice představují přesné umístění speciálních znaků.

Vyskytne levou ostrou závorkou, zobrazí následující chybová zpráva:
' <' Znaků, šestnáctková hodnota 0x3C, nelze zahrnout do názvu. Řádek # #pozice.
V této chybové zprávě řádek # a # pozice znamenat polohu kde existuje levou ostrou závorku, ale kde je nalezen druhý levou ostrou závorku.

Pokud soubor XML obsahuje pravá úhlová závorka (>), dvojité uvozovky (") nebo apostrof (') XmlReader a XmlDocument objekty zpracovat tyto objekty vzhledem k tomu, že tyto znaky vyžadují pouze jeden znak nahrazení.

zpět na horní

Nahrazení zvláštních znaků

Nahrazení ampersand a levou ostrou závorku znaky:

  1. Vytvořte soubor XML.
  2. Vytvoření aplikace Visual C# .NET a potom vložte kód.
zpět na horní

Vytvoření souboru XML

Zkopírujte a vložte následující kód do programu Poznámkový blok a uložte soubor jako 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>

zpět na horní

Vytvořit projekt Visual C# .NET

  1. Vytvořte novou aplikaci Visual C# .NET Windows takto:
    1. Spusťte aplikaci Visual Studio .NET.
    2. V nabídce soubor přejděte na příkaz Nový a klepněte na příkaz projekt.
    3. V dialogovém okně Nový projekt klepněte na tlačítko Projekty Visual C# v části Typy projektua v části šablonyklepněte na příkaz Aplikace systému Windows .
  2. Přetáhněte ovládací prvek TextBox , dva ovládací prvky tlačítka a ovládací prvek DataGrid z panelu nástrojů do výchozího formuláře Form1.cs.
  3. Nastavte vlastnost víceřádkové textové pole na hodnotu True.
  4. Importujte následující obory názvů:
    using System.Xml;using System.IO;
    using System.Data.SqlClient;

  5. Přidejte následující kód po hlavní funkce:
    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. Následující kód přidejte do události Button1_Click :
    XmlDocument xmldoc = new XmlDocument();        xmldoc = LoadXMLDoc();
    XmlNode nextnode;
    nextnode = xmldoc.FirstChild.NextSibling;
    this.textBox1.Text = nextnode.OuterXml.ToString();

  7. Přidejte následující kód k události 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. Změňte vlastnosti SqlConnection připojovací řetězec podle potřeby pro vaše prostředí.
  9. Sestavte a spusťte projekt.
  10. Klepněte na tlačítko Button1.

    Odpovídají chyby, které obdržíte popis chyb, které jsou vysvětleny v požadováno: soubor XML s speciální znaky oddílu. XML data se zobrazí v textové pole; ampersand je nahrazen.
  11. Klepněte na tlačítko Button2.

    V prvku DataGridVšimněte si, že firma má ampersand a dat XML se zobrazí textové pole
zpět na horní

Odkazy

Další informace získáte kliknutím na následující číslo v článku databáze Microsoft Knowledge Base:

Jak vyhledat a nahradit zvláštní znaky v dokumentu XML pomocí jazyka Visual Basic 251354

zpět na horní
Vlastnosti

ID článku: 316063 - Poslední kontrola: 20. 1. 2017 - Revize: 1

Váš názor