Kodlu XML Dosyaları Nasıl Okunur ve Yazılır

Kodlu XML Dosyaları Nasıl Okunur ve Yazılır

Java'dan bir XML dosyasını nasıl okuyacağınızı ve yazacağınızı öğrenmek ister misiniz?





XML dosyaları veri depolama dahil olmak üzere çeşitli amaçlar için kullanılır. JSON popüler hale gelmeden önce XML, yapılandırılmış verileri temsil etmek, depolamak ve taşımak için tercih edilen biçimdi. XML'in popülaritesi son yıllarda azalmış olsa da, zaman zaman bununla karşılaşabilirsiniz, bu nedenle onunla nasıl çalışılacağını koddan öğrenmek önemlidir.





Java Standard Edition (SE) şunları içerir: XML İşleme için Java API (JAXP) , XML işlemenin birçok yönünü kapsayan bir şemsiye terimdir. Bunlar şunları içerir:





  • KARAR: Belge Nesne Modeli, öğe, düğüm, öznitelikler vb. gibi XML yapılarıyla çalışmak için sınıflar içerir. DOM API, tüm XML belgesini işlenmek üzere belleğe yükler, bu nedenle büyük XML dosyalarıyla çalışmak için pek uygun değildir.
  • SAX: Simple API for XML, XML okumak için olaya dayalı bir algoritmadır. Burada XML, XML okunurken bulunan olaylar tetiklenerek işlenir. Bu yöntemi kullanmak için bellek gereksinimleri düşüktür, ancak API ile çalışmak DOM ile çalışmaktan daha karmaşıktır.
  • STAX: XML için Akış API'si, XML API'lerine yeni eklenen bir özelliktir ve XML'de yüksek performanslı akış filtreleme, işleme ve değişiklik sağlar. Tüm XML belgesini belleğe yüklemekten kaçınırken, olay güdümlü bir mimari yerine çekme tipi bir mimari sağlar, bu nedenle uygulamanın kodlanması ve anlaşılması SAX API'sini kullanmaktan daha kolaydır.

Bu yazıda kullandığımız DOM API'si Java'dan XML dosyalarının nasıl okunacağını ve yazılacağını göstermek. Diğer iki API'yi gelecek makalelerde ele alacağız.

Örnek XML Dosyası

Bu makalenin amacı doğrultusunda, aşağıdaki örnek XML'i kullanarak kavramları gösteriyoruz. Burada :






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


Ralls, Kim
...

Bir XML Dosyasını Okumak

DOM API kullanarak bir XML dosyasını okumak için gereken temel adımlara bakalım.

İlk adım, örneğini almaktır. Belge Oluşturucu . Oluşturucu, XML belgelerini ayrıştırmak için kullanılır. Temel kullanım için bunu şöyle yapıyoruz:





facebookta nasıl çevrimdışı görünebilirim
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setNamespaceAware(false);
factory.setValidating(false);
DocumentBuilder builder = factory.newDocumentBuilder();

Artık tüm belgeyi XML kök öğesinden başlayarak belleğe yükleyebiliriz. Örneğimizde, bu katalog öğe.

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

İşte bu kadar millet! XML okumak için DOM API'si gerçekten basittir. Artık kök öğesinden başlayarak tüm XML belgesine erişiminiz var, katalog . Şimdi onunla nasıl çalışacağımızı görelim.





DOM API'sini kullanma

Artık XML kökümüz olduğuna göre eleman , ilginç bilgi parçalarını çıkarmak için DOM API'sini kullanabiliriz.

hepsini al kitap kök elemanın çocukları ve üzerlerinde döngü. Bunu not et getChildNodes() İadeler herşey metin, yorumlar vb. dahil olmak üzere çocuklar. Amacımız için yalnızca alt öğelere ihtiyacımız var, bu yüzden diğerlerini atlıyoruz.

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
}

Ebeveyne verilen belirli bir alt öğeyi nasıl bulursunuz? Aşağıdaki statik yöntem, bulunursa ilk eşleşen öğeyi veya null değerini döndürür. Gördüğünüz gibi, prosedür, alt düğümlerin listesini almayı ve bunlar arasında dolaşmayı, belirtilen ada sahip öğe düğümlerini seçmeyi içerir.

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;
}

DOM API'nin bir öğe içindeki metin içeriğini ayrı bir tür düğümü olarak ele aldığını unutmayın. TEXT_NODE . Ek olarak, metin içeriği birden çok bitişik metin düğümüne bölünebilir. Bu nedenle, bir öğe içindeki metin içeriğini getirmek için aşağıdaki özel işlem gereklidir.

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();
}

Bu kolaylık işlevleriyle donanmış olarak, şimdi örnek XML'imizden bazı bilgileri listelemek için bazı kodlara bakalım. Her kitap için, örneğin bir kitap kataloğunda bulunabilecek ayrıntılı bilgileri göstermek istiyoruz.

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 Çıktısı Yazma

Java sağlar XML Dönüşüm API'sı XML verilerini dönüştürmek için. Bu API ile birlikte kullanıyoruz kimlik dönüşümü çıktı üretmek için.

Örnek olarak yeni bir tane ekleyelim. kitap Yukarıda sunulan örnek kataloğun elemanı. Kitabın detayları (örn. yazar , Başlık , vb) harici olarak, belki bir özellikler dosyasından veya bir veritabanından elde edilebilir. Verileri yüklemek için aşağıdaki özellikler dosyasını kullanıyoruz.

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.

İlk adım, yukarıda sunulan yöntemi kullanarak mevcut XML dosyasını ayrıştırmaktır. Kod ayrıca aşağıda gösterilmiştir.

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

Verileri, özellikler dosyasından şu komutu kullanarak yüklüyoruz: Özellikler java ile sağlanan sınıf. Kod oldukça basittir ve aşağıda gösterilmiştir.

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

Özellikler yüklendikten sonra, özellikler dosyasından eklemek istediğimiz değerleri alırız.

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');

Şimdi bir boş oluşturalım kitap öğe.

pc ve mac arasında dosya paylaşın
Element book = document.createElement('book');
book.setAttribute('id', id);

Alt öğelerin eklenmesi kitap önemsizdir. Kolaylık sağlamak için, gerekli eleman adlarını bir Liste ve değerleri bir döngüye ekleyin.

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);

Ve bu böyle yapılır. NS katalog eleman şimdi yeni kitap eleman eklendi. Şimdi geriye kalan tek şey güncellenmiş XML'i yazmak.

XML'i yazmak için bir örneğine ihtiyacımız var. trafo aşağıda gösterildiği gibi oluşturulur. kullanarak çıktı XML'inin girintisini istediğimizi unutmayın. setOutputProperty() yöntem.

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

XML çıktısını oluşturmanın son adımı, dönüşümü uygulamaktır. Sonuç çıktı akışında görünür, sistem çıkışı .

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

Çıktıyı doğrudan bir dosyaya yazmak için aşağıdakileri kullanın.

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

Bu, DOM API'sini kullanarak XML dosyalarını okuma ve yazma hakkındaki bu makaleyi tamamlıyor.

Uygulamalarınızda DOM API kullandınız mı? Nasıl performans gösterdi? Lütfen aşağıdaki yorumlarda bize bildirin.

Paylaş Paylaş Cıvıldamak E-posta Canon vs. Nikon: Hangi Fotoğraf Makinesi Markası Daha İyi?

Canon ve Nikon, kamera endüstrisindeki en büyük iki isim. Ancak hangi marka daha iyi kamera ve lens yelpazesi sunuyor?

Sonrakini Oku
İlgili konular
  • Programlama
  • Java
Yazar hakkında Jay Sridhar(17 Makale Yayınlandı) Jay Sridhar'dan Daha Fazla

Haber bültenimize abone ol

Teknik ipuçları, incelemeler, ücretsiz e-kitaplar ve özel fırsatlar için bültenimize katılın!

Abone olmak için buraya tıklayın