Reklamcılık
Java'dan bir XML dosyasını nasıl okuyacağınızı ve yazacağınızı öğrenmek ister misiniz?
XML dosyaları XML Dosyası Nedir ve Nasıl Açıp Kullanabilirsiniz?"XML" terimini görmüş olabilirsiniz. Hatta yanlışlıkla bir XML dosyası açmış olabilirsiniz. XML nedir ve nasıl kullanılır? Devamını oku 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 Standart Sürümü (SE) Başlarken Öğrenmeniz Gereken 10 Temel Java Kavramıİster bir GUI yazıyor olun, ister sunucu tarafı yazılım geliştiriyor olun, isterse Android kullanan bir mobil uygulama geliştiriyor olun, Java öğrenmek size iyi hizmet edecektir. İşte başlamanıza yardımcı olacak bazı temel Java kavramları. Devamını oku 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:
- DOM: Belge Nesne Modeli, öğe, düğüm, nitelikler vb. gibi XML yapılarıyla çalışmak için sınıflar içerir. DOM API, XML belgesinin tamamını 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, bunun yerine çekme tipi bir mimari sağlar. olay odaklı bir mimariden daha iyidir, bu nedenle uygulamanın kodlanması ve anlaşılması SAX kullanmaktan daha kolaydır API.
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:
1.0?>Gambardella, Matta XML Geliştirici Kılavuzu
Bilgisayar 44.95 2000-10-01 XML ile uygulama oluşturmaya derinlemesine bir bakış. 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:
DocumentBuilderFactory fabrikası = DocumentBuilderFactory.newInstance(); fabrika.setNamespaceAware (yanlış); fabrika.setValidating (yanlış); DocumentBuilder oluşturucu = fabrika.newDocumentBuilder();
Artık tüm belgeyi XML kök öğesinden başlayarak belleğe yükleyebiliriz. Örneğimizde, bu katalog öğe.
Dosya dosyası =...; // Okumak için XML dosyası. Belge belgesi = builder.parse (dosya); Öğe kataloğu = document.getDocumentElement();
Ve işte bu, 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 sadece alt öğelere ihtiyacımız var, bu yüzden diğerlerini atlıyoruz.
NodeList kitaplar = katalog.getChildNodes(); for (int i = 0, ii = 0, n = kitaplar.getLength(); ben < n; i++) { Düğüm alt öğesi = kitaplar.item (i); if ( child.getNodeType() != Düğüm. ELEMENT_NODE ) devam et; Element kitap = (Element) çocuk; // burada Element kitabıyla çalışın. }
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 eleman düğümlerini seçmeyi içerir.
statik özel Düğüm findFirstNamedElement (Düğüm üst öğesi, String tagName) { NodeList çocukları = parent.getChildNodes(); for (int i = 0, in = children.getLength(); ben
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.
statik özel Dize getCharacterData (Düğüm üst öğesi) { StringBuilder metin = yeni StringBuilder(); if ( parent == null ) text.toString(); NodeList çocukları = parent.getChildNodes(); for (int k = 0, kn = çocuklar.getLength(); k < kn; k++) { Düğüm alt öğesi = çocuklar.item (k); if ( child.getNodeType() != Düğüm. TEXT_NODE ) ara; text.append (child.getNodeValue()); } text.toString() döndür; }
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 kitaplar = katalog.getChildNodes(); for (int i = 0, ii = 0, n = kitaplar.getLength(); ben < n; i++) { Düğüm alt öğesi = kitaplar.item (i); if ( child.getNodeType() != Düğüm. ELEMENT_NODE ) devam et; Element kitap = (Element) çocuk; ii++; String kimliği = book.getAttribute("id"); Dize yazar = getCharacterData (findFirstNamedElement (alt,"yazar")); Dize başlığı = getCharacterData (findFirstNamedElement (alt, "başlık")); Dize türü = getCharacterData (findFirstNamedElement (alt,"tür")); String fiyatı = getCharacterData (findFirstNamedElement (alt, "fiyat")); String yayın tarihi = getCharacterData (findFirstNamedElement (alt,"yayın tarihi")); String descr = getCharacterData (findFirstNamedElement (alt,"açıklama")); System.out.printf("%3d. kitap kimliği = %s\n" + " yazar: %s\n" + " başlık: %s\n" + " tür: %s\n" + " fiyat: %s\n" + " yayın tarihi: %s \n" + " açıklama: %s\n", ii, id, yazar, başlık, tür, fiyat, yayın tarihi, açıklama); }
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. yazar=Jane Austen. başlık=Gurur ve Önyargı. tür=Romantik. fiyat=6.99. yayınlama_tarihi=2010-04-01. description="Evrensel olarak kabul edilen bir gerçektir, iyi bir servete sahip olan bekar bir erkeğin bir eşe ihtiyacı vardır." Böylece gurur başlar ve Önyargı, Jane Austen'in tüm zamanların en popüler romanlarından biri olan esprili edep komedisi, aralarında fevkalade medeni bir fikir tartışması sunuyor. gururlu Bay Darcy ve önyargılı Elizabeth Bennet, on sekizinci yüzyıldan kalma bir dizi salonda canlı flörtlerini oynarken entrikalar.
İ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.
Dosya dosyası =...; // Okumak için XML dosyası. Belge belgesi = builder.parse (dosya); Öğe kataloğu = 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 =...; Özellikler sahne = yeni Özellikler(); 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 yazar = props.getProperty("yazar"); Dize başlığı = props.getProperty("başlık"); String türü = props.getProperty("tür"); String fiyat = props.getProperty("fiyat"); String yayınlama_tarihi = props.getProperty("yayın_tarihi"); String descr = props.getProperty("açıklama");
Şimdi bir boş oluşturalım kitap öğe.
Öğe kitabı = document.createElement("kitap"); 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.
Listeelnames =Arrays.asList("yazar", "başlık", "tür", "fiyat", "yayınlama_tarihi", "açıklama"); for (String elname: elnames) { Element el = document.createElement (elname); Metin metni = document.createTextNode (props.getProperty (elname)); el.appendChild (metin); book.appendChild (el); } katalog.appendChild (kitap);
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(); Transformatör tformu = tfact.newTransformer(); tform.setOutputProperty (OutputKeys. GİRİNTİ, "evet"); 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 (yeni DOMSource (belge), yeni StreamResult (System.out));
Çıktıyı doğrudan bir dosyaya yazmak için aşağıdakileri kullanın.
tform.transform (yeni DOMSource (belge), yeni StreamResult (yeni Dosya("output.xml")));
Bu, DOM API'sini kullanarak XML dosyalarını okuma ve yazma hakkındaki bu makaleyi tamamlıyor.
Uygulamalarınızda DOM API'sini kullandınız mı? Nasıl performans gösterdi? Lütfen aşağıdaki yorumlarda bize bildirin.