Jak czytać i zapisywać pliki XML z kodem

  • Joseph Goodman
  • 0
  • 4696
  • 1181
Reklama

Czy chcesz nauczyć się czytać i zapisywać pliki XML z Java??

Pliki XML Co to jest plik XML i jak go otworzyć i używać? Co to jest plik XML i jak go otworzyć i używać? Być może widziałeś termin „XML”. Możliwe, że nawet przypadkowo otworzyłeś plik XML. Co to jest XML i jak go używasz? są wykorzystywane do różnych celów, w tym do przechowywania danych. Zanim JSON stał się popularny, XML był preferowanym formatem do reprezentowania, przechowywania i transportu danych strukturalnych. Mimo że popularność XML spadła w ostatnich latach, możesz go czasem spotkać, dlatego ważne jest, aby nauczyć się z niego korzystać z kodu.

Java Standard Edition (SE) 10 podstawowych pojęć Java, których powinieneś nauczyć się na początku 10 podstawowych pojęć Java, których powinieneś nauczyć się na początku Bez względu na to, czy piszesz GUI, rozwijasz oprogramowanie po stronie serwera, czy aplikację mobilną na Androida, nauka Java będzie służyć dobrze Oto kilka podstawowych pojęć Java, które pomogą Ci zacząć. obejmuje Java API for XML Processing (JAXP), który jest ogólnym pojęciem obejmującym większość aspektów przetwarzania XML. Obejmują one:

  • DOM: Document Object Model zawiera klasy do pracy z artefaktami XML, takimi jak element, węzeł, atrybuty itp. DOM API ładuje cały dokument XML do pamięci w celu przetworzenia, więc nie jest bardzo odpowiedni do pracy z dużymi plikami XML.
  • SAX: Simple API for XML to algorytm sterowany zdarzeniami do odczytu XML. Tutaj XML jest przetwarzany przez odpalanie zdarzeń znalezionych podczas odczytu XML. Wymagania dotyczące pamięci dla tej metody są niskie, ale praca z API jest bardziej złożona niż praca z DOM.
  • StAX: Streaming API dla XML jest najnowszym dodatkiem do interfejsów API XML i zapewnia wysoce wydajne filtrowanie, przetwarzanie i modyfikację strumienia XML. Chociaż unika ładowania całego dokumentu XML do pamięci, zapewnia architekturę typu pull zamiast architektury opartej na zdarzeniach, więc aplikacja jest łatwiejsza do kodowania i zrozumienia niż przy użyciu interfejsu API SAX.

W tym artykule używamy DOM API aby zademonstrować, jak czytać i zapisywać pliki XML z Java. Pozostałe dwa interfejsy API omówimy w przyszłych artykułach.

Przykładowy plik XML

Na potrzeby tego artykułu demonstrujemy koncepcje za pomocą następującego przykładowego kodu XML, który można znaleźć tutaj:

   Gambardella, Matthew XML Developer's Guide Komputer 44.95 2000-10-01 Dogłębne spojrzenie na tworzenie aplikacji za pomocą XML. Ralls, Kim… 

Odczytywanie pliku XML

Przyjrzyjmy się podstawowym krokom wymaganym do odczytu pliku XML za pomocą DOM API.

Pierwszym krokiem jest uzyskanie wystąpienia DocumentBuilder. Konstruktor służy do analizowania dokumentów XML. W przypadku podstawowego użycia robimy to w następujący sposób:

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance (); factory.setNamespaceAware (false); factory.setValidating (false); DocumentBuilder builder = factory.newDocumentBuilder (); 

Możemy teraz załadować cały dokument do pamięci, zaczynając od elementu głównego XML. W naszym przykładzie jest to katalog element.

Plik pliku =…; // plik XML do odczytu Dokument dokument = builder.parse (plik); Katalog elementów = document.getDocumentElement (); 

I to wszystko, ludzie! Interfejs API DOM do odczytu XML jest bardzo prosty. Masz teraz dostęp do całego dokumentu XML, zaczynając od jego elementu głównego, katalog. Zobaczmy teraz, jak z tym pracować.

Korzystanie z interfejsu API DOM

Teraz, gdy mamy katalog główny XML Element, możemy użyć DOM API do wydobywania interesujących samorodków informacji.

Zdobądź wszystkie książka dzieci elementu głównego i zapętlić je. Zauważ, że getChildNodes () zwraca wszystko dzieci, w tym tekst, komentarze itp. Do naszych celów potrzebujemy tylko elementów potomnych, więc pomijamy pozostałe.

NodeList books = catalog.getChildNodes (); for (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 znaleźć konkretny element potomny, biorąc pod uwagę rodzica? Poniższa metoda statyczna zwraca pierwszy zgodny element, jeśli został znaleziony, lub null. Jak widać, procedura polega na uzyskaniu listy węzłów potomnych i zapętleniu ich przez wybranie węzłów elementów o określonej nazwie.

static private Node findFirstNamedElement (Node parent, String tagName) NodeList children = parent.getChildNodes (); for (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;  

Zauważ, że interfejs API DOM traktuje treść tekstu w elemencie jako osobny węzeł typu TEXT_NODE. Ponadto treść tekstu można podzielić na wiele sąsiednich węzłów tekstowych. Dlatego wymagane jest następujące specjalne przetwarzanie, aby pobrać zawartość tekstową w elemencie.

static private String getCharacterData (Node parent) StringBuilder text = new StringBuilder (); if (parent == null) zwraca text.toString (); NodeList children = parent.getChildNodes (); for (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();  

Uzbrojeni w te funkcje wygody, spójrzmy teraz na kod do wyszczególnienia niektórych informacji z naszego przykładowego XML. Chcielibyśmy pokazać szczegółowe informacje dla każdej książki, takie jak te, które będą dostępne w katalogu książek.

NodeList books = catalog.getChildNodes (); for (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);  

Zapisywanie danych wyjściowych XML

Java zapewnia Interfejs API XML Tranform przekształcać dane XML. Używamy tego interfejsu API z transformacja tożsamości generować wyjście.

Jako przykład dodajmy nowy książka element do przykładowego katalogu przedstawionego powyżej. Szczegóły książki (takie jak autor, tytuł, itp.) można uzyskać zewnętrznie, być może z pliku właściwości lub bazy danych. Do załadowania danych używamy następującego pliku właściwości.

id = bk113 autor = Jane Austen tytuł = Duma i uprzedzenie gatunek = Romans cena = 6,99 opublikuj_data = 2010-04-01 opis = "To prawda, że ​​powszechnie uznaje się, że jeden człowiek posiadający szczęście musi być w potrzebie żona." Tak zaczyna się Duma i uprzedzenie, dowcipna komedia o manierach Jane Austen - jedna z najpopularniejszych powieści wszechczasów - przedstawiająca doskonale cywilizowaną walkę między dumnym panem Darcy a uprzedzoną Elizabeth Bennet, gdy grają w swoje porywające zaloty w serii XVIII-wieczne intrygi w salonie. 

Pierwszym krokiem jest parsowanie istniejącego pliku XML przy użyciu metody przedstawionej powyżej. Kod pokazano również poniżej.

Plik pliku =…; // plik XML do odczytu Dokument dokument = builder.parse (plik); Katalog elementów = document.getDocumentElement (); 

Ładujemy dane z pliku właściwości za pomocą Nieruchomości klasa wyposażona w java. Kod jest dość prosty i pokazano poniżej.

String propsFile =…; Właściwości rekwizyty = nowe właściwości (); try (FileReader in = new FileReader (propsFile)) props.load (in);  

Po załadowaniu właściwości pobieramy wartości, które chcemy dodać z pliku właściwości.

Ciąg id = props.getProperty („id”); Ciąg autor = props.getProperty („autor”); String title = props.getProperty („title”); Gatunek znaków = props.getProperty („gatunek”); Cena łańcucha = props.getProperty („cena”); Ciąg opublikuj datę = props.getProperty („data_publikowania”); Ciąg descr = props.getProperty („opis”); 

Stwórzmy teraz puste książka element.

Element book = document.createElement („book”); book.setAttribute ("id", id); 

Dodawanie elementów potomnych do książka jest banalny. Dla wygody zbieramy wymagane nazwy elementów w Lista i dodaj wartości w pętli.

List elnames = Arrays.asList („autor”, „tytuł”, „gatunek”, „cena”, „data_publikowania”, „opis”); for (String elname: elnames) Element el = document.createElement (elname); Tekst tekst = document.createTextNode (props.getProperty (nazwa)); el.appendChild (tekst); book.appendChild (el);  catalog.appendChild (książka); 

I tak się to robi. The katalog element ma teraz nowy książka element dodany. Teraz pozostaje tylko napisanie zaktualizowanego pliku XML.

Do napisania XML potrzebujemy wystąpienia Transformator który jest tworzony jak pokazano poniżej. Zauważ, że żądamy wcięcia wyjściowego XML za pomocą setOutputProperty () metoda.

TransformerFactory tfact = TransformerFactory.newInstance (); Transformator tform = tfact.newTransformer (); tform.setOutputProperty (OutputKeys.INDENT, „tak”); tform.setOutputProperty („http://xml.apache.org/xsltindent-amount”, „3”); 

Ostatnim krokiem w generowaniu danych wyjściowych XML jest zastosowanie transformacji. Wynik pojawi się w strumieniu wyjściowym, System.out.

tform.transform (nowy DOMSource (dokument), nowy StreamResult (System.out)); 

Aby zapisać dane wyjściowe bezpośrednio do pliku, użyj następujących poleceń.

tform.transform (nowy DOMSource (dokument), nowy StreamResult (nowy plik („output.xml”))); 

I to kończy ten artykuł na temat odczytu i zapisu plików XML za pomocą DOM API.

Czy używałeś DOM API w swoich aplikacjach? Jak to działało? Daj nam znać w komentarzach poniżej.




Jeszcze bez komentarzy

O nowoczesnej technologii, prostej i niedrogiej.
Twój przewodnik w świecie nowoczesnych technologii. Dowiedz się, jak korzystać z technologii i gadżetów, które nas otaczają każdego dnia i dowiedz się, jak odkrywać ciekawe rzeczy w Internecie.