XML -tiedostojen lukeminen ja kirjoittaminen koodilla

XML -tiedostojen lukeminen ja kirjoittaminen koodilla

Haluatko oppia lukemaan ja kirjoittamaan XML -tiedoston javasta?





XML -tiedostot käytetään moniin tarkoituksiin, mukaan lukien tietojen tallentamiseen. Ennen kuin JSONista tuli suosittu, XML oli ensisijainen muoto strukturoidun datan esittämiseen, tallentamiseen ja siirtämiseen. Vaikka XML: n suosio on heikentynyt viime vuosina, saatat kohdata sitä ajoittain, joten on tärkeää oppia työskentelemään sen kanssa koodista.





Java Standard Edition (SE) sisältää Java -sovellusliittymä XML -käsittelyyn (JAXP) , joka on kattava termi, joka kattaa useimmat XML -käsittelyn näkökohdat. Nämä sisältävät:





  • TUOMIO: Asiakirjaobjektimalli sisältää luokat XML -artefaktien, kuten elementin, solmun, määritteiden jne. Kanssa työskentelyyn. DOM -sovellusliittymä lataa koko XML -asiakirjan muistiin käsiteltäväksi, joten se ei sovellu hyvin suurten XML -tiedostojen käsittelyyn.
  • SAX: Simple API for XML on tapahtumapohjainen algoritmi XML: n lukemiseen. Täällä XML käsitellään käynnistämällä tapahtumia, jotka havaitaan XML: ää luettaessa. Tämän menetelmän käytön muistivaatimukset ovat vähäiset, mutta sovellusliittymän kanssa työskentely on monimutkaisempaa kuin DOM: n kanssa työskentely.
  • STAX: Streaming-sovellusliittymä XML: lle on äskettäin lisätty XML-sovellusliittymiin ja tarjoaa korkean suorituskyvyn virran suodatuksen, käsittelyn ja muokkaamisen. Vaikka se välttää koko XML-asiakirjan lataamista muistiin, se tarjoaa pull-tyyppisen arkkitehtuurin tapahtumapohjaisen arkkitehtuurin sijaan, joten sovellus on helpompi koodata ja ymmärtää kuin käyttää SAX-sovellusliittymää.

Tässä artikkelissa käytämme DOM -sovellusliittymä esittelemään kuinka lukea ja kirjoittaa XML -tiedostoja javasta. Käsittelemme kaksi muuta sovellusliittymää tulevissa artikkeleissa.

Esimerkki XML -tiedostosta

Tässä artikkelissa esittelemme käsitteitä seuraavan XML -esimerkin avulla, joka löytyy tässä :






Gambardella, Matthew
XML Developer's Guide
Computer
44.95
2000-10-01
An in-depth look at creating applications
with XML.


Ralls, Kim
...

XML -tiedoston lukeminen

Katsotaanpa perusvaiheita, joita tarvitaan XML -tiedoston lukemiseen DOM -sovellusliittymän avulla.

Ensimmäinen askel on saada esimerkki DocumentBuilder . Rakentajaa käytetään jäsentämään XML -asiakirjoja. Peruskäyttöön teemme sen seuraavasti:





Windows 10 käynnistyssilmukka nollauksen jälkeen
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setNamespaceAware(false);
factory.setValidating(false);
DocumentBuilder builder = factory.newDocumentBuilder();

Voimme nyt ladata koko asiakirjan muistiin alkaen XML -juurielementistä. Esimerkissämme se on luettelo elementti.

File file = ...; // XML file to read
Document document = builder.parse(file);
Element catalog = document.getDocumentElement();

Ja siinä kaikki, ihmiset! DOM -sovellusliittymä XML: n lukemiseen on todella yksinkertainen. Sinulla on nyt pääsy koko XML -asiakirjaan sen juurielementistä alkaen, luettelo . Katsotaan nyt, miten työskennellä sen kanssa.





DOM -sovellusliittymän käyttö

Nyt kun meillä on XML -juuri Elementti , voimme käyttää DOM -sovellusliittymää poimiaksemme mielenkiintoisia tietopaloja.

Hanki kaikki kirja juurielementin lapset ja silmukka niiden yli. Ota huomioon, että getChildNodes () palauttaa kaikki lapset, mukaan lukien teksti, kommentit jne. Tarvitsemme vain lapsielementtejä, joten ohitamme muut.

NodeList books = catalog.getChildNodes();
for (int i = 0, ii = 0, n = books.getLength() ; i Node child = books.item(i);
if ( child.getNodeType() != Node.ELEMENT_NODE )
continue;
Element book = (Element)child;
// work with the book Element here
}

Miten löydät tietyn lapsen elementin vanhemman perusteella? Seuraava staattinen menetelmä palauttaa ensimmäisen vastaavan elementin, jos se on löydetty, tai null. Kuten näette, menettely sisältää alisolmuluettelon hankkimisen ja silmukoinnin niiden läpi valitsemalla elementtisolmut määritetyllä nimellä.

static private Node findFirstNamedElement(Node parent,String tagName)
{
NodeList children = parent.getChildNodes();
for (int i = 0, in = children.getLength() ; i Node child = children.item(i);
if ( child.getNodeType() != Node.ELEMENT_NODE )
continue;
if ( child.getNodeName().equals(tagName) )
return child;
}
return null;
}

Huomaa, että DOM -sovellusliittymä käsittelee elementin tekstisisältöä erillisenä tyypin solmuna TEXT_NODE . Lisäksi tekstisisältö voidaan jakaa useisiin vierekkäisiin tekstisolmuihin. Joten seuraava erikoiskäsittely vaaditaan elementin tekstisisällön hakemiseksi.

static private String getCharacterData(Node parent)
{
StringBuilder text = new StringBuilder();
if ( parent == null )
return text.toString();
NodeList children = parent.getChildNodes();
for (int k = 0, kn = children.getLength() ; k Node child = children.item(k);
if ( child.getNodeType() != Node.TEXT_NODE )
break;
text.append(child.getNodeValue());
}
return text.toString();
}

Näillä mukavuustoiminnoilla varustettuna tarkastellaan nyt koodia, jolla luetellaan joitakin tietoja XML -esimerkkinämme. Haluamme näyttää yksityiskohtaiset tiedot jokaisesta kirjasta, kuten ne, jotka ovat saatavilla kirjaluettelossa.

NodeList books = catalog.getChildNodes();
for (int i = 0, ii = 0, n = books.getLength() ; 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
' +
' author: %s
' +
' title: %s
' +
' genre: %s
' +
' price: %s
' +
' pubdate: %s
' +
' descr: %s
',
ii, id, author, title, genre, price, pubdate, descr);
}

XML -tulostuksen kirjoittaminen

Java tarjoaa XML Tranform API muuttaa XML -tietoja. Käytämme tätä sovellusliittymää identiteetin muutos tuotoksen tuottamiseksi.

Lisätään esimerkiksi uusi kirja elementti yllä olevaan esimerkkiluetteloon. Kirjan yksityiskohdat (esim kirjoittaja , otsikko , jne.) voidaan hankkia ulkoisesti, esimerkiksi ominaisuustiedostosta tai tietokannasta. Käytämme seuraavan ominaisuustiedoston lataamiseen tietoja.

id=bk113
author=Jane Austen
title=Pride and Prejudice
genre=Romance
price=6.99
publish_date=2010-04-01
description='It is a truth universally acknowledged, that a single man in possession of a good fortune must be in want of a wife.' So begins Pride and Prejudice, Jane Austen's witty comedy of manners-one of the most popular novels of all time-that features splendidly civilized sparring between the proud Mr. Darcy and the prejudiced Elizabeth Bennet as they play out their spirited courtship in a series of eighteenth-century drawing-room intrigues.

Ensimmäinen vaihe on jäsentää olemassa oleva XML -tiedosto yllä kuvatulla menetelmällä. Koodi näkyy myös alla.

File file = ...; // XML file to read
Document document = builder.parse(file);
Element catalog = document.getDocumentElement();

Ladataan tiedot ominaisuustiedostosta käyttämällä Ominaisuudet luokka, jossa on java. Koodi on melko yksinkertainen ja näkyy alla.

String propsFile = ...;
Properties props = new Properties();
try (FileReader in = new FileReader(propsFile)) {
props.load(in);
}

Kun ominaisuudet on ladattu, noutaamme lisättävät arvot ominaisuustiedostosta.

String id = props.getProperty('id');
String author = props.getProperty('author');
String title = props.getProperty('title');
String genre = props.getProperty('genre');
String price = props.getProperty('price');
String publish_date = props.getProperty('publish_date');
String descr = props.getProperty('description');

Luodaan nyt tyhjä kirja elementti.

miksi en saa ilmoituksia
Element book = document.createElement('book');
book.setAttribute('id', id);

Lapsielementtien lisääminen kirja on triviaali. Mukavuuden vuoksi keräämme tarvittavat elementtien nimet kohtaan a Lista ja lisää arvot silmukkaan.

List elnames =Arrays.asList('author', 'title', 'genre', 'price',
'publish_date', 'description');
for (String elname : elnames) {
Element el = document.createElement(elname);
Text text = document.createTextNode(props.getProperty(elname));
el.appendChild(text);
book.appendChild(el);
}
catalog.appendChild(book);

Ja näin tehdään. The luettelo elementissä on nyt uusi kirja elementti lisätty. Jäljellä on vain päivitetyn XML -tiedoston kirjoittaminen.

XML: n kirjoittamiseen tarvitsemme ilmentymän Muuntaja joka luodaan alla olevan kuvan mukaisesti. Huomaa, että pyydämme tulosteen XML: n sisennystä käyttämällä setOutputProperty () menetelmä.

TransformerFactory tfact = TransformerFactory.newInstance();
Transformer tform = tfact.newTransformer();
tform.setOutputProperty(OutputKeys.INDENT, 'yes');
tform.setOutputProperty('{http://xml.apache.org/xslt}indent-amount', '3');

Viimeinen vaihe XML -ulostulon luomisessa on transformaation soveltaminen. Tulos näkyy lähtövirrassa, System.out .

tform.transform(new DOMSource(document), new StreamResult(System.out));

Voit kirjoittaa tuloksen suoraan tiedostoon seuraavasti.

tform.transform(new DOMSource(document), new StreamResult(new File('output.xml')));

Ja tämä lopettaa tämän artikkelin XML -tiedostojen lukemisesta ja kirjoittamisesta DOM -sovellusliittymän avulla.

Oletko käyttänyt DOM -sovellusliittymää sovelluksissasi? Miten se toimi? Kerro meille alla olevissa kommenteissa.

Jaa Jaa Tweet Sähköposti Canon vs.Nikon: Mikä kameramerkki on parempi?

Canon ja Nikon ovat kamerateollisuuden kaksi suurinta nimeä. Mutta mikä merkki tarjoaa paremman valikoiman kameroita ja objektiiveja?

Lue seuraava
Liittyvät aiheet
  • Ohjelmointi
  • Java
Kirjailijasta Jay Sridhar(17 artikkelia julkaistu) Lisää Jay Sridharilta

tilaa uutiskirjeemme

Liity uutiskirjeeseemme saadaksesi teknisiä vinkkejä, arvosteluja, ilmaisia ​​e -kirjoja ja ainutlaatuisia tarjouksia!

Klikkaa tästä tilataksesi