
Brian Curtis
0
4151
1002
Chtěli byste se naučit, jak číst a zapisovat XML soubor z javy?
Soubory XML Co je soubor XML a jak jej můžete otevřít a používat? Co je soubor XML a jak jej můžete otevřít a používat? Možná jste viděli výraz „XML“. Možná jste dokonce omylem otevřeli soubor XML. Co je XML a jak jej používáte? se používají pro různé účely, včetně ukládání dat. Než se stal JSON oblíbeným, byl XML preferovaným formátem pro reprezentaci, ukládání a transport strukturovaných dat. Přestože popularita XML v posledních letech ubývala, můžete se s ní občas setkat, proto je důležité naučit se s ním pracovat z kódu.
Java Standard Edition (SE) 10 základních konceptů Java, které byste se měli naučit, když začnete 10 základních konceptů Java, které byste se měli naučit, když začnete Ať už píšete GUI, vyvíjíte software na straně serveru nebo mobilní aplikaci pomocí Androidu, učení Java bude sloužit dobře. Zde je několik základních konceptů Java, které vám pomohou začít. zahrnuje Java API pro zpracování XML (JAXP), což je zastřešující pojem pokrývající většinu aspektů zpracování XML. Tyto zahrnují:
- DOM: Objektový model dokumentu zahrnuje třídy pro práci s artefakty XML, jako jsou element, uzel, atributy atd. DOM API načítá celý dokument XML do paměti pro zpracování, takže není příliš vhodný pro práci s velkými soubory XML..
- SAXOFON: Simple API pro XML je algoritmus pro čtení XML založený na událostech. Zde se XML zpracovává spouštěcími událostmi nalezenými při čtení XML. Požadavky na paměť pro použití této metody jsou nízké, ale práce s API je složitější než práce s DOM.
- StAX: Streaming API pro XML je nedávným přírůstkem do XML API a poskytuje vysoce výkonné filtrování, zpracování a úpravy XML. Ačkoli se vyhýbá načtení celého dokumentu XML do paměti, poskytuje spíše architekturu typu pull než architekturu založenou na událostech, takže je aplikace snáze kódovatelná a srozumitelnější než pomocí rozhraní SAX API.
V tomto článku používáme DOM API ukázat, jak číst a zapisovat soubory XML z javy. V dalších článcích se budeme zabývat dalšími dvěma API.
Ukázkový soubor XML
Pro účely tohoto článku demonstrujeme koncepty pomocí následujícího ukázkového XML, které najdete zde:
Gambardella, Matthew XML Příručka pro vývojáře Počítač 44.95 2000-10-01 Podrobný pohled na vytváření aplikací s XML. Ralls, Kim…
Čtení souboru XML
Podívejme se na základní kroky potřebné pro čtení souboru XML pomocí rozhraní DOM API.
Prvním krokem je získání instance DocumentBuilder. Tvůrce se používá k analýze dokumentů XML. Pro základní použití to děláme takto:
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance (); factory.setNamespaceAware (false); factory.setValidating (false); DocumentBuilder builder = factory.newDocumentBuilder ();
Nyní můžeme načíst celý dokument do paměti počínaje kořenovým prvkem XML. V našem příkladu je to katalog živel.
Soubor file =…; // soubor XML ke čtení Dokument document = builder.parse (soubor); Katalog prvků = document.getDocumentElement ();
A to je vše, lidi! DOM API pro čtení XML je opravdu jednoduché. Nyní máte přístup k celému dokumentu XML od jeho kořenového prvku, katalog. Podívejme se nyní, jak s tím pracovat.
Používání DOM API
Nyní máme kořen XML Živel, můžeme použít DOM API k extrahování zajímavých nuggetů informací.
Získejte všechny rezervovat děti kořenového prvku a smyčky nad nimi. Všimněte si, že getChildNodes () se vrací Všechno děti, včetně textu, komentářů atd. Pro náš účel potřebujeme jen podřízené prvky, takže přeskočíme ostatní.
Knihy NodeList = catalog.getChildNodes (); pro (int i = 0, ii = 0, n = books.getLength (); i < n ; i++) Node child = books.item(i); if ( child.getNodeType() != Node.ELEMENT_NODE ) continue; Element book = (Element)child; // work with the book Element here
Jak zjistíte konkrétní podřízený prvek vzhledem k rodiči? Následující statická metoda vrací první odpovídající prvek, pokud byl nalezen, nebo null. Jak vidíte, postup zahrnuje získání seznamu podřízených uzlů a jejich opakování vybráním uzlů prvků se zadaným názvem.
statický soukromý uzel findFirstNamedElement (rodič uzlu, řetězec tagName) NodeList children = parent.getChildNodes (); pro (int i = 0, in = children.getLength (); i < in ; i++) Node child = children.item(i); if ( child.getNodeType() != Node.ELEMENT_NODE ) continue; if ( child.getNodeName().equals(tagName) ) return child; return null;
Všimněte si, že rozhraní DOM API považuje textový obsah v prvku za samostatný uzel typu TEXT_NODE. Kromě toho může být textový obsah rozdělen do několika sousedních textových uzlů. K načtení textového obsahu v prvku je tedy nutné následující speciální zpracování.
statický soukromý řetězec getCharacterData (rodič uzlu) StringBuilder text = new StringBuilder (); if (parent == null) vrátí text.toString (); NodeList children = parent.getChildNodes (); pro (int k = 0, kn = children.getLength (); k < kn ; k++) Node child = children.item(k); if ( child.getNodeType() != Node.TEXT_NODE ) break; text.append(child.getNodeValue()); return text.toString();
Vyzbrojeni těmito pohodlnými funkcemi, podívejme se nyní na nějaký kód pro výpis některých informací z našeho ukázkového XML. Chtěli bychom zobrazit podrobné informace o každé knize, které by byly k dispozici v katalogu knih.
Knihy NodeList = catalog.getChildNodes (); pro (int i = 0, ii = 0, n = books.getLength (); i < n ; i++) Node child = books.item(i); if ( child.getNodeType() != Node.ELEMENT_NODE ) continue; Element book = (Element)child; ii++; String id = book.getAttribute("id"); String author = getCharacterData(findFirstNamedElement(child,"author")); String title = getCharacterData(findFirstNamedElement(child,"title")); String genre = getCharacterData(findFirstNamedElement(child,"genre")); String price = getCharacterData(findFirstNamedElement(child,"price")); String pubdate = getCharacterData(findFirstNamedElement(child,"pubdate")); String descr = getCharacterData(findFirstNamedElement(child,"description")); System.out.printf("%3d. book id = %s\n" + " author: %s\n" + " title: %s\n" + " genre: %s\n" + " price: %s\n" + " pubdate: %s\n" + " descr: %s\n", ii, id, author, title, genre, price, pubdate, descr);
Zápis výstupu XML
Java poskytuje XML Tranform API transformovat data XML. Používáme toto API s transformace identity generovat výstup.
Jako příklad můžeme uvést nový rezervovat prvek výše uvedeného ukázkového katalogu. Podrobnosti o knize (např autor, titul, atd.) lze získat externě, například ze souboru vlastností nebo databáze. K načtení dat používáme následující soubor vlastností.
id = bk113 autor = Jane Austen titul = Pride and Prejudice žánr = Romance price = 6.99 publish_date = 2010-04-01 description = "Je pravda, že se všeobecně uznává, že svobodný člověk, který má štěstí, musí mít zájem o manželka." Tak začíná Pride and Prejudice, vtipná komedie chování Jane Austenové - jeden z nejpopulárnějších románů všech dob -, který představuje skvěle civilizované sparring mezi hrdým panem Darcym a předpojatou Elizabeth Bennet, když hrají v duchu namáhavé dvoření v řadě intrik z osmnáctého století.
Prvním krokem je analýza existujícího souboru XML pomocí výše uvedené metody. Kód je také zobrazen níže.
Soubor file =…; // soubor XML ke čtení Dokument document = builder.parse (soubor); Katalog prvků = document.getDocumentElement ();
Načítáme data ze souboru vlastností pomocí Vlastnosti třída s javou. Kód je poměrně jednoduchý a je uveden níže.
String propsFile =…; Vlastnosti props = new Properties (); try (FileReader in = new FileReader (propsFile)) props.load (in);
Po načtení vlastností načteme hodnoty, které chceme přidat ze souboru vlastností.
String id = props.getProperty ("id"); String author = props.getProperty ("autor"); String title = props.getProperty ("title"); String žánr = props.getProperty ("žánr"); String price = props.getProperty ("cena"); String publish_date = props.getProperty ("publish_date"); String descr = props.getProperty ("description");
Vytvořme nyní prázdné rezervovat živel.
Element book = document.createElement ("kniha"); book.setAttribute ("id", id);
Přidání podřízených prvků do rezervovat je triviální. Pro větší pohodlí shromažďujeme požadované názvy prvků v a Seznam a přidejte hodnoty do smyčky.
Seznam elnames = Arrays.asList ("autor", "název", "žánr", "cena", "publish_date", "description"); pro (String elname: elnames) Element el = document.createElement (elname); Text text = document.createTextNode (props.getProperty (elname)); el.appendChild (text); book.appendChild (el); catalog.appendChild (book);
A tak se to dělá. katalog prvek má nyní nový rezervovat prvek přidán. Nyní zbývá pouze napsat aktualizovaný XML.
Pro zápis XML potřebujeme instanci Transformátor který je vytvořen, jak je ukázáno níže. Upozorňujeme, že požadujeme odsazení výstupního XML pomocí setOutputProperty () metoda.
TransformerFactory tfact = TransformerFactory.newInstance (); Transformátor tform = tfact.newTransformer (); tform.setOutputProperty (OutputKeys.INDENT, "yes"); tform.setOutputProperty ("http://xml.apache.org/xsltindent-amount", "3");
Posledním krokem při generování výstupu XML je použití transformace. Výsledek se objeví na výstupním toku, System.out.
tform.transform (nový zdroj DOMS (dokument), nový StreamResult (System.out));
Chcete-li výstup zapsat přímo do souboru, použijte následující.
tform.transform (nový zdroj DOMS (dokument), nový StreamResult (nový soubor ("output.xml")));
A to zabalí tento článek o čtení a zápisu XML souborů pomocí DOM API.
Použili jste ve svých aplikacích DOM API? Jak se to podařilo? Prosím, dejte nám vědět v komentářích níže.