Spôsoby spracovania xml v c. Ako otvoriť XML dokument - funkcie práce s XML súbormi. Vytvorenie prvku XML s deťmi




Extensible Markup Language (XML). V skutočnosti ide len o textové súbory, ktoré používajú vlastné značky na popis štruktúry a ďalších funkcií dokumentu.

Čo je XML

XML je značkovací jazyk vytvorený konzorciom World Wide Web Consortium (W3C) na definovanie syntaxe na kódovanie dokumentov, ktoré môžu čítať ľudia a stroje. Robí to prostredníctvom značiek, ktoré definujú štruktúru dokumentu, ako aj spôsob, akým sa má dokument uchovávať a prepravovať.

Najjednoduchší spôsob, ako ho porovnať s iným značkovacím jazykom, ktorý možno poznáte, je hypertextové označenie(HTML) používané na kódovanie webových stránok. HTML používa preddefinovanú sadu značkovacích znakov (krátkych kódov), ktoré popisujú formát obsahu na webovej stránke.

Rozdiel oproti XML je však v tom, že je rozšíriteľný. XML nemá preddefinovaný značkovací jazyk ako HTML. Namiesto toho XML umožňuje používateľom vytvárať si vlastné značkovacie znaky na popis obsahu, čím sa vytvára neobmedzená a samodefinujúca množina znakov.

HTML je v podstate jazyk, ktorý sa zameriava na prezentáciu obsahu, zatiaľ čo XML je vyhradený jazyk na popis údajov, ktorý sa používa na ukladanie údajov.

XML sa často používa ako základ pre ďalšie formáty dokumentov, ktorých sú stovky. Tu je niekoľko, ktoré by ste mohli chcieť vedieť:

  • RSS a ATOM popisujú, ako by mali aplikácie zaobchádzať s webovými kanálmi.
  • Microsoft .NET používa XML pre svoje konfiguračné súbory.
  • Microsoft Office používa XML ako základ pre štruktúru dokumentu.

Ak teda máte súbor XML, nemusí vám nevyhnutne povedať, na akú aplikáciu je určený. Toho sa však nemusíte obávať, pokiaľ nevyvíjate súbory XML.

Ako otvoriť súbor XML

Existuje niekoľko spôsobov, ako priamo otvoriť súbor XML. Môžete ich otvárať a upravovať pomocou ľubovoľného textového editora, prezerať si ich pomocou ľubovoľného webového prehliadača alebo použiť webovú stránku, ktorá vám ich umožňuje prezerať, upravovať a dokonca prevádzať do iných formátov.

Pri pravidelnej práci s XML používajte textový editor

Keďže súbory XML sú jednoducho textové súbory, možno ich otvoriť v ľubovoľnom textovom editore. Mnohé textové editory, ako napríklad Poznámkový blok, však jednoducho nie sú navrhnuté tak, aby zobrazovali súbory XML so správnou štruktúrou. To môže byť užitočné na rýchle zoznámenie sa s obsahom súboru XML. Na prácu s nimi však existujú pohodlnejšie nástroje.


Použitie webového prehliadača na zobrazenie súboru XML

Ak nepotrebujete upravovať súbor XML, ale chcete len zobraziť obsah, váš prehliadač túto úlohu zvládne. Okrem toho je váš webový prehliadač s najväčšou pravdepodobnosťou už nakonfigurovaný ako štandardný prehliadač súborov XML. Takže dvojitým kliknutím na súbor XML by sa mal otvoriť v prehliadači.

Ak nie, môžete kliknúť pravým tlačidlom myši na súbor a nájsť možnosti na jeho otvorenie v akejkoľvek inej aplikácii. Jednoducho vyberte svoj webový prehliadač zo zoznamu programov.

Keď sa súbor otvorí, mali by ste vidieť dobre štruktúrované údaje. Nie je to také pekné ako farebný vzhľad, ktorý získate v programe Notepad++, ale je to oveľa lepšie ako v poznámkovom bloku.

Používanie online editora pre súbory XML

Ak chcete upraviť náhodný súbor XML a nechcete sťahovať nový textový editor, alebo potrebujete previesť xml súbor do iného formátu Existuje niekoľko slušných online editorov XML dostupných zadarmo.

TutorialsPoint.com, XMLGrid.net a CodeBeautify.org - Umožňujú vám prezerať a upravovať súbory XML. Po dokončení úprav si môžete upravený súbor XML stiahnuť alebo ho dokonca previesť do iného formátu.

Napríklad používame CodeBeautify.org. Stránka je rozdelená na tri časti. Vľavo je súbor XML, s ktorým pracujete. V strede nájdete niekoľko funkcií. Na pravej strane uvidíte výsledky niektorých možností, z ktorých si môžete vybrať.

Napríklad na obrázku nižšie je náš úplný súbor XML vľavo a tabla výsledkov zobrazuje stromové zobrazenie, pretože sme klikli na tlačidlo Stromové zobrazenie v strede.

Použite tlačidlo Prehľadávať na načítanie súboru XML z počítača alebo tlačidlo Načítať adresu URL na načítanie XML z online zdroja

Tlačidlo Stromové zobrazenie zobrazuje údaje v dobre naformátovanej stromovej štruktúre na table výsledkov, pričom všetky značky sú zvýraznené oranžovou farbou a atribúty napravo od značiek.

Beatify zobrazuje vaše údaje v prehľadnom a ľahko čitateľnom formáte.

Tlačidlo Minifikovať zobrazuje vaše údaje s použitím čo najmenšieho počtu medzier. Táto funkcia umiestni každý údaj na jeden riadok. To sa vám bude hodiť pri pokuse o zmenšenie súboru, čo ušetrí miesto.

Nakoniec môžete použiť tlačidlo XML na JSON na prevod XML do formátu JSON a tlačidlo Exportovať do CSV na uloženie údajov ako súbor s hodnotami oddelenými čiarkami alebo tlačidlo Stiahnuť na stiahnutie akýchkoľvek zmien, ktoré ste vykonali v novom XML súbor.

Pravdepodobne ste už počuli o XML a poznáte veľa dôvodov, prečo by sa mal používať vo vašej organizácii. Ale čo to vlastne XML je? Tento článok vysvetľuje, čo je XML a ako funguje.

V tomto článku

Značky, značky a značky

Na pochopenie XML je užitočné zapamätať si, ako môžete označiť údaje. Dokumenty vytvárali ľudia počas mnohých storočí a počas toho času si do nich ľudia robili poznámky. Učitelia napríklad často označujú prácu študentov, aby naznačili potrebu presunúť odseky, urobiť vetu jasnejšou, opraviť pravopisné chyby atď. Označenie dokumentu môže pomôcť určiť štruktúru, význam a vzhľad informácií. Ak ste niekedy používali revízie v programe Microsoft Office Word, potom ste oboznámení s počítačovým formulárom označovania.

Vo svete informačných technológií sa pojem „označovanie“ vyvinul do pojmu „značenie“. Značky používajú kódy nazývané značky (alebo niekedy tokeny) na definovanie štruktúry, vizuálneho vzhľadu a – v prípade XML – významu údajov.

HTML text tohto článku je dobrým príkladom použitia počítačových značiek. Ak kliknete pravým tlačidlom myši na túto stránku v programe Microsoft Internet Explorer a vyberiete Zobraziť HTML kód, uvidíte čitateľný text a HTML značky ako

A

. V dokumentoch HTML a XML sú značky ľahko rozpoznateľné, pretože sú uzavreté v lomených zátvorkách. V zdrojovom texte tohto článku vykonávajú značky HTML mnoho funkcií, napríklad definujú začiatok a koniec každého odseku (

...

) a umiestnenie výkresov.

Vlastnosti XML

Dokumenty HTML a XML obsahujú údaje uzavreté v značkách, ale tu sa podobnosti medzi týmito dvoma jazykmi končia. Vo formáte HTML značky určujú dizajn údajov – umiestnenie nadpisov, začiatok odseku atď. Vo formáte XML značky určujú štruktúru a význam údajov – čo to je.

Opísaním štruktúry a významu údajov je možné ich opätovne použiť niekoľkými spôsobmi. Napríklad, ak máte blok údajov o predaji, v ktorom je každý prvok jasne definovaný, môžete do výkazu predaja načítať len potrebné prvky a ostatné údaje preniesť do účtovnej databázy. Inými slovami, na generovanie a označovanie údajov vo formáte XML môžete použiť jeden systém a potom tieto údaje spracovať v akomkoľvek inom systéme bez ohľadu na platformu klienta alebo operačný systém. Táto kompatibilita robí z XML základ jednej z najpopulárnejších technológií výmeny údajov.

Pri práci dbajte na nasledovné:

    HTML nie je možné použiť namiesto XML. Údaje XML však možno uzavrieť do značiek HTML a zobraziť na webových stránkach.

    Možnosti HTML sú obmedzené na preddefinovanú sadu značiek, ktoré sú spoločné pre všetkých používateľov.

    Pravidlá XML vám umožňujú vytvárať akékoľvek značky potrebné na popis údajov a ich štruktúry. Povedzme, že potrebujete ukladať a zdieľať informácie o svojich miláčikoch. Ak to chcete urobiť, môžete vytvoriť nasledujúci kód XML:

    Izzy siamský 6 Áno č Izz138bod Colin Wilcox

Ako vidíte, značky XML jasne ukazujú, aké údaje si prezeráte. Napríklad je jasné, že údaje sa týkajú mačky a môžete ľahko určiť jej meno, vek atď. Pretože môžete vytvárať značky, ktoré definujú takmer akúkoľvek štruktúru údajov, XML je rozšíriteľné.

Nezamieňajte si však značky v tomto príklade so značkami v súbore HTML. Ak sa napríklad vyššie uvedený text XML vloží do súboru HTML a otvorí sa v prehliadači, výsledky budú vyzerať takto:

Izzy Siamese 6 áno nie Izz138bod Colin Wilcox

Webový prehliadač bude ignorovať značky XML a zobrazí iba údaje.

Dobre spracované údaje

Pravdepodobne ste už počuli niekoho z IT hovoriť o „dobre sformovanom“ súbore XML. Správne vytvorený súbor XML musí spĺňať veľmi prísne pravidlá. Ak sa neriadi týmito pravidlami, XML nebude fungovať. Napríklad v predchádzajúcom príklade má každá otváracia značka zodpovedajúcu uzatváraciu značku, takže tento príklad sa riadi jedným z pravidiel správne vytvoreného súboru XML. Ak zo súboru odstránite značku a pokúsite sa ju otvoriť v niektorom z programov balíka Office, zobrazí sa chybové hlásenie a takýto súbor nebude možné použiť.

Nemusíte poznať pravidlá na vytvorenie správne vytvoreného súboru XML (hoci nie je ťažké im porozumieť), ale nezabudnite, že v iných aplikáciách a systémoch možno použiť iba správne vytvorené údaje XML. Ak sa súbor XML neotvorí, je pravdepodobne poškodený.

XML je nezávislý na platforme, čo znamená, že akýkoľvek program navrhnutý na používanie XML môže čítať a spracovávať údaje XML bez ohľadu na hardvér alebo operačný systém. Napríklad, ak použijete správne značky XML, môžete použiť počítačový program na otvorenie a spracovanie údajov prijatých z hlavného počítača. A bez ohľadu na to, kto vytvoril údaje XML, s údajmi možno manipulovať v rôznych aplikáciách balíka Office. Vďaka svojej kompatibilite sa XML stalo jednou z najpopulárnejších technológií na výmenu údajov medzi databázami a počítačmi používateľov.

Okrem dobre tvarovaných označených údajov systémy XML zvyčajne používajú dve ďalšie komponenty: schémy a transformácie. Nasledujúce časti popisujú, ako fungujú.

Schéma

Nenechajte sa zastrašiť pojmom „schéma“. Schéma je jednoducho súbor XML, ktorý obsahuje pravidlá pre obsah dátového súboru XML. Súbory schém majú zvyčajne príponu XSD, zatiaľ čo dátové súbory XML používajú príponu XML.

Schémy umožňujú programom overovať údaje. Tvoria štruktúru dát a zabezpečujú ich zrozumiteľnosť pre tvorcu a ostatných ľudí. Ak napríklad používateľ zadá neplatné údaje, napríklad text do poľa dátumu, program môže používateľa vyzvať, aby ich opravil. Ak sa údaje v súbore XML zhodujú s pravidlami v schéme, na ich čítanie, interpretáciu a spracovanie môžete použiť ľubovoľný program s podporou XML. Napríklad, ako je znázornené na obrázku nižšie, Excel dokáže overiť údaje za súlad so schémou CAT.

Obvody môžu byť zložité a tento článok nedokáže vysvetliť, ako ich vytvoriť. (Aj vo vašej organizácii sú pravdepodobne IT ľudia, ktorí vedia, ako to urobiť.) Je však užitočné vedieť, ako diagramy vyzerajú. Nasledujúci diagram definuje pravidlá pre sadu značiek ... :

Nebojte sa, ak príklad nie je jasný. Stačí venovať pozornosť nasledujúcemu:

    Prvky reťazca v vzorovej schéme sa nazývajú deklarácie. Ak by sa vyžadovali ďalšie informácie o zvierati, ako je jeho farba alebo špeciálne vlastnosti, oddelenie IT by do diagramu pridalo príslušné vyhlásenia. Systém XML je možné upravovať podľa toho, ako sa obchodné potreby vyvíjajú.

    Deklarácie sú účinným prostriedkom na manipuláciu s dátovou štruktúrou. Napríklad reklama znamená, že značky ako napr A , musí nasledovať vo vyššie uvedenom poradí. Reklamy môžu tiež overiť typy používateľských vstupov. Napríklad vyššie uvedený obvod vyžaduje kladné celé číslo pre vek mačky a booleovské hodnoty (TRUE alebo FALSE) pre značky ALTERED a DECLAWED.

    Ak údaje v súbore XML dodržiavajú pravidlá schémy, údaje sa považujú za platné. Proces overovania, či dátový súbor XML vyhovuje pravidlám schémy, sa nazýva (dosť logicky) validácia. Veľkou výhodou používania schém je, že môžu zabrániť poškodeniu údajov. Schémy tiež uľahčujú vyhľadávanie poškodených údajov, pretože spracovanie súboru XML sa zastaví, keď sa vyskytne problém.

Premeny

Ako bolo uvedené vyššie, XML tiež umožňuje efektívne využitie a opätovné použitie údajov. Mechanizmus opätovného použitia údajov sa nazýva transformácia XSLT (alebo jednoducho transformácia).

Vy (alebo vaše IT oddelenie) môžete tiež použiť transformácie na výmenu údajov medzi systémami typu back-end, ako sú napríklad databázy. Predpokladajme, že databáza A ukladá údaje o predaji do tabuľky, ktorá je užitočná pre obchodné oddelenie. Databáza B uchováva údaje o príjmoch a výdavkoch v tabuľke špeciálne určenej pre účtovníctvo. Databáza B môže použiť transformáciu na prevzatie údajov z databázy A a ich vloženie do príslušných tabuliek.

Kombinácia dátového súboru, schémy a transformácie tvorí základný XML systém. Nasledujúci obrázok znázorňuje fungovanie takýchto systémov. Dátový súbor sa skontroluje podľa pravidiel schémy a potom sa akýmkoľvek vhodným spôsobom odošle na transformáciu. V tomto prípade transformácia umiestni údaje do tabuľky na webovej stránke.

Nasledujúci príklad ukazuje transformáciu, ktorá načítava údaje do tabuľky na webovej stránke. Účelom príkladu nie je vysvetliť, ako vytvárať transformácie, ale ukázať jednu z foriem, ktoré môžu mať.

názov Plemeno Vek Pozmenené Bez pazúrov Licencia Vlastník

Tento príklad ukazuje, ako môže vyzerať text jedného typu transformácie, ale nezabudnite, že sa môžete obmedziť na jasný popis toho, čo z údajov potrebujete, a tento popis môžete urobiť vo svojom rodnom jazyku. Môžete napríklad ísť na oddelenie IT a povedať, že potrebujú vytlačiť údaje o predaji pre konkrétne regióny za posledné dva roky a že informácie by mali vyzerať takto a takto. Oddelenie potom môže napísať (alebo upraviť) transformáciu, aby splnila vašu požiadavku.

Microsoft a rastúci počet ďalších spoločností vytvárajú transformácie na rôzne účely, vďaka čomu je používanie XML ešte pohodlnejšie. V budúcnosti bude pravdepodobne možné stiahnuť konverziu, ktorá vyhovuje vašim potrebám, s malým alebo žiadnym ďalším prispôsobením. To znamená, že časom bude používanie XML čoraz lacnejšie.

XML v systéme Microsoft Office

Profesionálne vydania balíka Office poskytujú rozšírenú podporu XML. Počnúc systémom Microsoft Office 2007 používa Microsoft Office formáty súborov založené na XML, ako sú DOCX, XLSX a PPTX. Pretože XML ukladá údaje v textovom formáte a nie v proprietárnom binárnom formáte, klienti môžu definovať svoje vlastné schémy a používať vaše údaje rôznymi spôsobmi bez toho, aby museli platiť licenčné poplatky. Ďalšie informácie o nových formátoch nájdete v téme Otvorené formáty XML a prípony názvov súborov. Nižšie sú uvedené ďalšie výhody.

To všetko je skvelé, ale čo ak máte údaje XML bez schémy? Závisí to od toho, ktorý program balíka Office používate. Napríklad, keď v Exceli otvoríte súbor XML bez schémy, predpokladá sa, že schéma existuje, a umožní vám načítať údaje do tabuľky XML. Na triedenie, filtrovanie a výpočet údajov môžete použiť zoznamy a tabuľky XML.

Povoľte funkcie XML v balíku Office

V predvolenom nastavení sa karta Vývojár nezobrazuje. Ak chcete používať príkazy XML v Office, musíte ho pridať na pás s nástrojmi.

Predchádzajúci článok popisoval všeobecné pojmy týkajúce sa XML. V tomto článku sa naučíme vykonávať základné úkony súvisiace so zmenou, pridávaním, vyhľadávaním v súbore XML.

XML súbor, ktorý sa používa v príklade.

Mazda 2007 BMW 2009

xml dom

V súčasnosti náš súbor obsahuje nasledujúcu štruktúru:

Vzťah medzi uzlami v XML DOM, základné momenty:

1. Každý uzol v strome DOM má nadradený ParentNode. V našom príklade je garáž rodičom oboch prvkov auta a oba prvky auta sú zase rodičmi prvkov modelu a ročníka.

Ako získať rodič prvku xml auta?

Console.WriteLine(elmRoot["auto"].ParentNode.Name); //Výsledok: garáž

2. Rodič môže mať deti ChildNodes. Napríklad pre garážový uzol sú deti obe prvky auta. Prvky auta majú aj detský model a rok výroby.

ChildNodes, je kolekcia, ktorá ukladá všetky podradené prvky xml, aby ste získali prístup k požadovanému prvku, musíte zadať jeho index. (Index vždy začína od nuly!)

Napríklad: ako získať prvý podradený prvok?

ElmRoot.ChildNodes;

3. Tak ako v bežnom živote, dieťa sa môže narodiť ako prvé Prvé dieťa, alebo ako posledné Posledné dieťa.

Ak si ako príklad vezmeme prvok auta, tak potom

FirstChild je model LastChild je rok

4. Medzi detskými prvkami sú zase spojenia, môžu to byť bratia alebo sestry, ak ideme do paralely so skutočným životom.

Dieťa môže mať napríklad brata predchádzajúceho súrodenca a brata nasledujúceho súrodenca

Console.WriteLine(elmRoot.ChildNodes.FirstChild.NextSibling.Name); //Výsledok: rok Console.WriteLine(elmRoot.ChildNodes.LastChild.PreviousSibling.Name); //Výsledok: model

Ak sa prvok nenájde, vyvolá sa výnimka: NullReferenceException, takže pri práci s xml vždy používajte bloky try catch.

Console.WriteLine(elmRoot.ChildNodes. LastChild.NextSibling.Name); Console.WriteLine(elmRoot.ChildNodes. FirstChild.PreviousSibling.Meno);

LastChild je NextSibling;
FirstChild je predchádzajúciSibling;

Pomocou vyššie opísaných metód sa môžete ľahko presunúť na požadovaný uzol a získať akúkoľvek hodnotu, ktorú potrebujete.

Ako získať hodnotu prvku xml?

Hodnotu xml prvku možno získať pomocou vlastnosti InnerText, napríklad:

Console.WriteLine(elmRoot["auto"].FirstChild.InnerText); //Výsledok: Mazda

Ďalší spôsob, ako získať rovnakú hodnotu prvku xml:

Console.WriteLine(elmRoot.FirstChild.FirstChild.InnerText); //Výsledok: Mazda

Postupnosť pohybov pozdĺž stromu DOM:

Garáž -> auto -> model -> Mazda

Dostávame rok:

ElmRoot["auto"].LastChild.InnerText; //Výsledok: 2007

Následná sekvencia:

Garáž -> auto -> rok -> 2007

Ďalší príklad: 3 spôsoby, ako dosiahnuť rovnaký výsledok.

Console.WriteLine(elmRoot.LastChild.FirstChild.InnerText); Console.WriteLine(elmRoot["auto"].NextSibling.FirstChild.InnerText); Console.WriteLine(elmRoot.ChildNodes.Item(1).FirstChild.InnerText); //Výsledok: BMW

Ak potrebujete získať rok pre prvok s hodnotou Mazda:

Console.WriteLine(elmRoot.FirstChild.LastChild.InnerText); //Výsledok: 2007

Pre BMW (dva spôsoby, získajte rovnaký výsledok)

Console.WriteLine(elmRoot.ChildNodes.Item(1).ChildNodes.Item(1).InnerText); Console.WriteLine(elmRoot.ChildNodes.ChildNodes.InnerText); //Výsledok: 2009

Ako zmeniť hodnoty prvkov xml?

Používanie majetku InnerText() Môžete získať aj zmeniť hodnotu prvku xml, napríklad zmeniť rok.

//Nastavte novú hodnotu elmRoot.FirstChild.LastChild.InnerText = "2010"; //Zobrazenie novej hodnoty na obrazovke konzoly Console.WriteLine(elmRoot.FirstChild.ChildNodes.Item(1).InnerText); //Výsledok: 2010

Zároveň si musíte uvedomiť, že všetky zmeny sa vyskytnú s virtuálnym súborom xml, ak otvoríte fyzický súbor, uvidíte, že v ňom je stále uvedený rok 2007.

Aby sa zmeny prejavili, musíte použiť metódu Uložiť, napríklad:

ElmRoot.Save("názov xml súboru alebo stream");

Teraz sa informácie zmenia vo „fyzickom“ súbore xml.

Ako získať počet podradených prvkov?

Console.WriteLine(elmRoot.FirstChild.ChildNodes.Count);

garáž -> auto obsahuje 2 deti: model a roč

Console.WriteLine(elmRoot.FirstChild.FirstChild.ChildNodes.Count);

garáž -> auto -> model obsahuje 1 detský xml prvok.

Prístup k detským prvkom

podľa indexu

ElmRoot.ChildNodes.Name; elmRoot.ChildNodes.Name; //Výsledok: auto

Pomocou slučky

Foreach (XmlNode nod v elmRoot.ChildNodes) ( Console.WriteLine(nod.Name); ) //Výsledok: auto, auto

Ako získať názov prvku xml?

elmRoot.Name; //Výsledok: garáž

Vytvorenie nového prvku XML

Vytvorme nový prvok v našom XML dokumente tak, aby sa líšil od ostatných dvoch (auto), nazvime ho autobus.

Pri vytváraní nového prvku použijeme odporúčanie zo stránky msdn a namiesto štandardného nového XmlElement použijeme metódu CreateElement.

XmlElement elm = xmlDoc.CreateElement("bus");

Vytvorenie a pridanie nového prvku xml

Vytvorme nový prvok xml s názvom „BUS“.

XmlElement elmRoot = xmlDoc.DocumentElement; Console.WriteLine(elmRoot.ChildNodes.Count); //auto, auto XmlElement elmNew = xmlDoc.CreateElement("bus"); elmRoot.AppendChild(elmNew); Console.WriteLine(elmRoot.ChildNodes.Count); //3 auto, auto, autobus xmlDoc.Save("názov xml súboru");

Vysvetlenie:

1. Najprv získame koreňový prvok, ku ktorému budeme pripájať nové prvky.

2. Ako kontrolu zobrazíme aktuálny počet podradených prvkov garážového prvku: 2 (auto a auto)

3. Vytvorte nový prvok BUS

4. Použitie metódy AppendChild pridanie nového prvku do stromu

5. Opäť použijeme kontrolu a zobrazíme aktuálny počet prvkov pre prvok garáže, teraz sú 3: auto, auto, autobus.

6. Aby zmeny ovplyvnili fyzický súbor, uložte ho

V samotnom súbore XML bude nový prvok vyzerať takto:

Ako pridať nový prvok xml?

Úloha: vytvorte nový XML element a pridajte doň nejaký textový obsah, napríklad rok výroby.

String strFilename = @"C:\lessons\Auto.xml"; XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load(strFilename); XmlElement elmRoot = xmlDoc.DocumentElement; XmlElement elmNew = xmlDoc.CreateElement("bus"); XmlText new_txt = xmlDoc.CreateTextNode("2006"); elmRoot.AppendChild(elmNew); elmRoot.LastChild.AppendChild(new_txt); Console.WriteLine(elmRoot.ChildNodes.Name); //bus Console.WriteLine(elmRoot.ChildNodes.LastChild.InnerText); //2006 Console.Read();

V súbore XML:

2006

Pre prehľadnosť

Teraz vytvorte „autobusový“ uzol s rovnakou architektúrou ako auto, to znamená, pridajte uzly: model, rok a nejaký textový obsah.

Vytvorenie prvku XML s deťmi

string strFilename = @"C:\lessons\Auto.xml"; //vytvor novy xml dokument v pamati XmlDocument xmlDoc = new XmlDocument(); //načítanie xml súboru do pamäte xmlDoc.Load(strFilename); //Získanie koreňového prvku XmlElement elmRoot = xmlDoc.DocumentElement; //Vytvorenie 3 prvkov: zbernica, model, rok XmlElement elmBUS = xmlDoc.CreateElement("bus"); XmlElement elmModel = xmlDoc.CreateElement("model"); XmlElement elmYear = xmlDoc.CreateElement("rok"); //Nastavte hodnoty pre prvky: model, rok XmlText year_txt = xmlDoc.CreateTextNode("2006"); //XmlText mod_txt = xmlDoc.CreateTextNode("liaz"); pridať inak //Pridanie dvoch podradených prvkov k prvku zbernice: model a rok elmBUS.AppendChild(elmModel); elmBUS.AppendChild(elmYear); //Pridanie hodnôt do uzlov modelu a roku elmModel.InnerText = "liaz"; elmYear.AppendChild(year_txt); //Pridanie novej zbernice prvkov xml do stromu elmRoot.AppendChild(elmBUS); //Skontrolujte, či je všetko pridané tak, ako má Console.WriteLine(elmRoot.ChildNodes.FirstChild.InnerText); Console.WriteLine(elmRoot.LastChild.LastChild.InnerText); //Ak je všetko v poriadku, potom použite metódu Uložiť xmlDoc.Save("názov súboru xml");

výsledok:

liaz 2006

Ako môžem skrátiť tento kód? Napríklad takto:

String PathXmlFile = @"C:\lessons\Auto.xml"; XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load(PathXmlFile); XmlElement elmRoot = xmlDoc.DocumentElement; XmlElement elmBUS = xmlDoc.CreateElement("bus"); XmlElement elmModel = xmlDoc.CreateElement("model"); XmlElement elmYear = xmlDoc.CreateElement("rok"); //Pridanie hodnôt do uzlov modelu a roku elmModel.InnerText = "liaz"; elmYear.InnerText = "2006"; elmBUS.AppendChild(elmModel); elmBUS.AppendChild(elmYear); elmRoot.AppendChild(elmBUS); //Ak je všetko správne, potom zavolajte metódu Save xmlDoc.Save("názov súboru xml");

Skrátime kód ešte trochu, na to použijeme vlastnosť InnerXml:

XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load(PathXmlFile); XmlElement elmXML = xmlDoc.CreateElement("bus"); string txt = " liaz" + "2006"; //InnerXml! elmXML.InnerXml = txt; //xmlDoc.DocumentElement (bude sa rovnať garáži) – toto je ďalší spôsob prístupu ku koreňovému prvku, rovnaký ako XmlElement elmRoot = xmlDoc.DocumentElement; xmlDoc.DocumentElement.AppendChild ( elmXML) xmlDoc.Uložiť(PathXmlFile);

Výsledok

Získajte zoznam prvkov pomocou GetElementByTagName

Vráti GetElementByTagName XmlNodeList, ktorý obsahuje všetky podradené prvky patriace k zadanému prvku, napríklad potrebujeme získať všetky modely áut, ktoré sú uložené v garáži:

XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load(strFilename); XmlNodeList modelName = xmlDoc.GetElementsByTagName("model"); foreach (uzol XmlNode v modeliName) ( Console.WriteLine(node.InnerText); ) //Výsledok: mazda, bmw, liaz

Prístup pomocou indexu:

String PathXmlFile = @"C:\lessons\Auto.xml"; XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load(PathXmlFile); XmlNodeList modelName = xmlDoc.GetElementsByTagName("model"); Console.WriteLine(názov modelu.VnútornýText); //Výsledok: liaz

Ako môžem pomocou metódy GetElementByTagName zmeniť textový obsah novovytvoreného prvku „zbernice“?

String PathXmlFile = @"C:\lessons\Auto.xml"; XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load(PathXmlFile); XmlNodeList modelName = xmlDoc.GetElementsByTagName("model"); Console.WriteLine(názov modelu.VnútornýText); //Prijatá hodnota: liaz

Alebo si môžete zmeniť názov liaz na Ikarus

Console.WriteLine(modelName.InnerText = "Ikarus");

Odkedy som sľúbil, že budem pri vývoji .NET aplikácií rozprávať o práci s dátami vo formáte XML, uplynulo už dosť času. Sľuby treba dodržiavať. Upozorňujeme, že tento článok nie je určený pre profesionálnych .NET vývojárov, ale pre tých, ktorí ešte nemajú výraznejšie skúsenosti s tvorbou .NET aplikácií.


Prečo by sme mali pracovať s XML?

Ak ešte nemáte veľmi dobrú predstavu o tom, čo je XML, potom odporúčam prečítať si článok „XML to myslí vážne a nadlho“ v „KV“ č. za rok 2007. Aby sme ušetrili miesto na dôležitejšie veci, nebude tu analyzovaný samotný formát XML.

Predtým, ako sa pustíte do oboznamovania sa s programovým kódom, musíte si zodpovedať jednu zásadnú otázku: prečo do svojej aplikácie vôbec zahrnúť podporu XML? Myslím, že túto otázku si v súvislosti s mnohými technológiami položilo veľa ľudí a nie všetky boli zahrnuté do aplikácií po odpovedi. V prípade XML je však situácia trochu iná a v mnohých situáciách existujú skutočné dôvody na použitie tohto formátu.

Hlavnou výhodou XML je, že ide o textový formát, no napriek tomu dokonale umožňuje ukladanie a prenos akýchkoľvek údajov. Keďže tento formát je textový, problém jeho multiplatformnosti je vyriešený sám osebe a rovnako jednoducho je vyriešený problém prenosu XML údajov (ako sa to robí napríklad v SOAP). Okrem toho môžete jednoducho zmeniť formát prenosu alebo ukladania údajov pridaním nových atribútov a bez starostí o kompatibilitu s predchádzajúcimi verziami formátu, pretože aplikácie používajúce starú verziu budú môcť čítať, čo potrebujú, bez toho, aby venovali pozornosť novým značky alebo atribúty. Mnoho aplikácií používa formáty súborov založené na XML, mnoho protokolov prenosu údajov je tiež založených na XML a zoznamy oboch sa stále rozrastajú.

Samozrejme, na druhej strane XML nie je príliš ekonomické, pretože, ako raz správne poznamenal jeden z návštevníkov fóra Computer News, XML dokumenty často pozostávajú z 10 % údajov a 90 % značiek. To však do značnej miery závisí od toho, aké značky si vyberiete. Môžeš písať sv. Melnikaite, 2, Môžem . Aj keď, aby som bol úprimný, zdá sa mi, že so súčasnými pevnými diskami a hrubými kanálmi nemá zmysel byť obzvlášť komprimovaný.

Takže v správnych rukách je XML výkonná a pohodlná vec a kvôli všadeprítomnosti tohto formátu mu nemôžete uniknúť. Prejdime teda k písaniu programového kódu.

Na programovanie budeme používať hlavný jazyk platformy .NET – C#. Aby si s daným programovým kódom precvičilo čo najviac čitateľov samo, použijem prvú verziu C# a .NET Framework.


Záznam údajov

Najprv si povedzme o zapisovaní údajov, pretože, viete, ak chcete niečo odniekiaľ prečítať, musíte najskôr niečo niekam zapísať. A keďže sme vy a ja začali programovať, nie je vhodné, aby sme XML dáta vytvárali manuálne. Začnime teda najskôr zápisom údajov do XML.

Najprv vytvorte nový projekt v Visual Studio, #Develop alebo C# Builder a pridajte System.Xml do zoznamu importovaných menných priestorov.

Špeciálna trieda, XmlTextWriter, je zodpovedná za zápis XML dát v .NET Frameworku, ktorá vám umožňuje zapisovať XML dáta do ľubovoľného streamu, čiže všeobecne povedané, môžeme ich použiť na zápis do súboru, databázy , a poslať niekomu cez internet, ale teraz všetko zapíšeme do súboru Výstup môžete presmerovať zmenou konštruktora objektu (t. j. neodovzdaním názvu súboru a jeho kódovania počas inicializácie, ale objektu, ktorý je údajom. stream).

String Názov súboru = "c:\\demo.xml"; XmlTextWriter xml = new XmlTextWriter(Názov súboru, System.Text.Encoding.Unicode); xml.Formatting = Formátovanie.Odsadené; xml.WriteStartDocument(); xml.WriteStartElement("rootelement"); pre (int i = 0; i< 10; i++) { xml.WriteStartElement("subelement"); xml.WriteAttributeString("attrib1", "value1"); xml.WriteAttributeString("attrib2", i.ToString()); for (int j = 0; j < 10; j++){ xml.WriteStartElement("subsubelement"); xml.WriteAttributeString("attr", j.ToString()); xml.WriteEndElement(); } xml.WriteEndElement(); } xml.WriteEndElement(); xml.WriteEndDocument(); xml.Close();

Prvý riadok je myslím celkom jasný – jednoducho zaznamenáva názov súboru, do ktorého dáta uložíme. Ďalej vytvoríme objekt typu XmlTextWriter (nazýva sa, ako vidíte, xml) a práve s ním vykonáme všetky ďalšie operácie. Upozorňujeme, že pri konštrukcii objektu špecifikujeme aj kódovanie, v ktorom bude XML zapísané: v našom príklade je to Unicode. Ďalší riadok vo všeobecnosti nie je potrebný, ale vďaka nemu bude náš dokument XML, ako sa hovorí, čitateľný pre ľudí, to znamená, že pridá potrebné zarážky a rozdelí ho na riadky. Bez toho by bol celý dokument napísaný v jednom riadku, čo síce šetrí miesto, no na ručnú úpravu je prakticky nevhodný.

Písanie dokumentu začína volaním metódy WriteStartDocument() nášho xml objektu. Nasledujúci riadok pridáva koreňový prvok „rootelement“ do nášho XML dokumentu (pripomínam, že pre XML dokumenty musí byť koreňový prvok prítomný v jednej kópii). Ďalej v cykle pridávame do nášho XML dokumentu desať ďalších prvkov, ktoré nenesú žiadnu sémantickú záťaž, pre každý z nich nastavíme dva atribúty a desať ďalších podprvkov. Upozorňujeme, že do reťazca môžeme pridať číslo bez explicitnej konverzie údajov, ale ak číslo musí tvoriť celý reťazec, musí sa skonvertovať explicitne pomocou metódy ToString(). Upozorňujeme tiež, že musíme explicitne zatvoriť každý prvok nášho dokumentu XML a potom celý dokument.

Teraz, keď bol náš dokument XML úspešne napísaný, pozrime sa, ako z neho môžeme čítať údaje.


Čítanie údajov

Pridajte do formulára svojej aplikácie komponent listBox (pokiaľ samozrejme nejde o konzolovú aplikáciu), aby ste mohli sledovať výsledok čítania XML súboru. No, ak je váš program konzolovým programom, potom môžete ľahko presmerovať výstup do konzoly.

Ako obvykle, najprv sa zoznámime s kódom programu a potom sa pozrieme na to, čo presne tento kód robí.

XmlTextReader xml = new XmlTextReader(FileName); xml.WhitespaceHandling = WhitespaceHandling.None; int i = 0; while (xml.Read())( if ((xml.NodeType == XmlNodeType.Element) & (xml.Name == "podprvok")) ( listBox1.Items.Add("podprvok " + i + " nájdený") ; i++; listBox1.Items.Add(" " + xml.GetAttribute("attrib1")); )( listBox1.Items.Add(" " + xml.GetAttribute("attr")); ) ) ) xml.Close();

Na čítanie, ako ste si mohli všimnúť, používame inú triedu, a to XmlTextReader. Nachádza sa v rovnakom mennom priestore ako trieda, ktorú sme použili na zápis údajov. V prvom riadku vytvoríme inštanciu XmlTextReader s názvom xml (tu predpokladáme, že premennú FileName sme už predtým definovali, aby sme preskočili prázdne riadky, ak sa nejakým spôsobom nevysvetliteľne objavia v našom práve vytvorenom XML súbore). riadok v danom fragmente kódu Premenná i sa používa na počítanie počtu prvkov "podprvku" nájdených v súbore XML, z ktorého sa načítavajú údaje.

Nasleduje cyklus priameho čítania údajov zo súboru. Metóda Read() načíta ďalší prvok XML dokumentu a po jeho prečítaní skontrolujeme, čo presne čítame. Ak skutočne ide o prvok „subelement“, potom do listBox1 pridáme informácie o prečítanom prvku, inkrementujeme premennú obsahujúcu počet prečítaných prvkov a potom načítame atribúty prvku. Po prečítaní atribútov organizujeme samostatnú slučku na čítanie podprvkov (všimnite si, že na to nepotrebujeme samostatný XmlTextReader) a atribúty týchto podprvkov, ako predtým, zadáme všetky načítané informácie do listBox1, aby sme kontrolovali správnosť čítanie.

Pri čítaní súborov XML, rovnako ako pri ich písaní, pri konštrukcii XmlTextReader, môžete zadať ako parameter stream, z ktorého sa má čítať, a potom môžete čítať nielen zo súborov, ale aj z iných zdrojov, príklady čo som už uviedol vyššie Je potrebné poznamenať jednu užitočnú vlastnosť triedy XmlTextReader: pri čítaní nenačíta celý čítaný XML dokument do pamäte, takže je vhodné analyzovať veľké XML dokumenty (napríklad XML databázy). .


V zákulisí

Vo všeobecnosti je príklad, o ktorom sme práve hovorili, príliš jednoduchý pre skutočné projekty. V dnešnej dobe sa pri čítaní XML dokumentov väčšinou validujú pomocou DTD, XML Schema alebo Relax NG. Validácia je kontrola súladu označenia dokumentu XML s niektorým štandardom popísaným v externom súbore. Overenie je potrebné, aby overenie dokumentu nebolo pevne zapojené do programového algoritmu, ale bolo možné ho ľubovoľne zmeniť pri zmene formátu údajov bez aktualizácie programového kódu, ktorý číta alebo zapisuje údaje. Bohužiaľ, teraz nebudeme mať čas vyriešiť overenie, pretože, ako sami chápete, objem novinového článku má určité obmedzenia.

Ďalším zaujímavým a užitočným praktickým bodom týkajúcim sa práce s údajmi XML je transformácia údajov XSL. Táto transformácia sa aplikuje na údaje, keď sú zobrazené na stránkach HTML, a v skutočnosti jednoducho aplikuje špecifickú šablónu webovej stránky na súbor XML obsahujúci nejaké údaje. Keďže leví podiel na súčasnom využívaní údajov XML je nejakým spôsobom na World Wide Web, bolo by veľmi, veľmi dobré zvážiť transformácie XSL.

Takže si myslím, že tento článok bude mať pokračovanie – ale samozrejme len vtedy, ak sa naň vy sami (teda čitatelia Computer News) spýtate na fóre alebo listom na moju emailovú adresu. Zatiaľ je to pravdepodobne všetko o používaní XML v aplikáciách .NET. Dúfam, že tieto informácie sú pre vás užitočné.