XML Dosyalarını Kodla Okuma ve Yazma

  • William Charles
  • 0
  • 3146
  • 191
reklâm

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 Dosyası Nedir ve Nasıl Açıp Kullanabilirsiniz? "XML" terimini görmüş olabilirsiniz. Yanlışlıkla bir XML dosyasını da açmış olabilirsiniz. XML nedir ve nasıl kullanıyorsunuz? verilerin depolanması 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 formattı. XML'in popülaritesi son yıllarda azalmış olsa da, zaman zaman karşılaşabilirsiniz, bu yüzden kodla nasıl çalışılacağını öğrenmek önemlidir..

Java Standard Edition (SE) 10 Başlarken Java Kavramları Başlarken Öğrenmeniz Gereken 10 Temel Java Kavramları Başlarken Öğrenmeniz Gerekenler Bir GUI yazarken, sunucu tarafında yazılım geliştirirken veya Android kullanarak bir mobil uygulama kullandığınızda, Java öğrenme hizmet verecektir iyisin. İşte başlamanıza yardımcı olacak bazı temel Java kavramları. içerir XML İşleme için Java API (JAXP), XML işlemenin çoğu yönünü kapsayan bir şemsiye terimdir. Bunlar şunları içerir:

  • DOM: Belge Nesne Modeli, eleman, düğüm, öznitelikler, vb. Gibi yapay nesnelerle ç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 çok uygun değildir..
  • SAX: XML için Basit API, XML okumak için olaya dayalı bir algoritmadır. Burada XML, XML okunurken bulunan olayları ateşleyerek işlenir. Bu yöntemi kullanmak için bellek gereksinimleri düşük, ancak API ile çalışmak DOM ile çalışmaktan daha karmaşık.
  • StAX: XML için Akış API'si, XML API'lerine son eklenen bir eklentidir ve XML'de yüksek performanslı akış filtreleme, işleme ve değiştirme sağlar. Tüm XML belgesini belleğe yüklemekten kaçınırken, olaya dayalı bir mimari yerine çekme türü bir mimari sunar, böylece uygulamanın SAX API'sini kullanmaktan daha kolay kodlanması ve anlaşılması daha kolaydır.

Bu yazıda, kullandığımız DOM API Java'dan XML dosyalarının nasıl okunup yazılacağını göstermek için. Gelecekteki makalelerde diğer iki API'yi ele alacağız.

Örnek bir XML dosyası

Bu makalenin amacı için, burada bulunabilecek aşağıdaki örnek XML'i kullanarak kavramları gösteriyoruz:

   Gambardella, Matthew XML Geliştirici Kılavuzu Bilgisayar 44.95 2000-10-01 XML ile uygulama oluşturmaya derinlemesine bir bakış. Ralls, Kim… 

XML Dosyası Okuma

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

İlk adım bir örnek elde etmektir. DocumentBuilder'ı. Oluşturucu, XML belgelerini ayrıştırmak için kullanılır. Temel kullanım için şu şekilde yaparız:

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance (); factory.setNamespaceAware (yanlış); factory.setValidating (yanlış); DocumentBuilder builder = factory.newDocumentBuilder (); 

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

Dosya dosyası =…; // Belgeyi okumak için XML dosyası. Document = builder.parse (file); Eleman kataloğu = document.getDocumentElement (); 

Ve işte millet! XML okumak için DOM API gerçekten basittir. Artık kök elemanından başlayarak tüm XML belgesine erişebilirsiniz., katalog. Şimdi nasıl çalışacağımızı görelim..

DOM API’yı kullanma

Artık XML köküne sahibiz. eleman, DOM API’yı, ilginç bilgi külçelerini çıkarmak için kullanabiliriz..

Hepsini al kitap Kök elemanın çocukları ve üzerleri üzerinde döngü. Bunu not et getChildNodes () döner herşey metinler, yorumlar vb. dahil çocuklar.

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

Ebeveyn verilen belirli bir alt öğeyi nasıl bulursunuz? Aşağıdaki statik yöntem, bulunursa veya null olursa ilk eşleşen öğeyi döndürür. Gördüğünüz gibi, prosedür alt düğümlerin listesini alma ve bunlar arasında döngüsel olarak belirtilen isimdeki eleman düğümlerini seçme işlemlerini içerir..

statik özel Düğüm findFirstNamedElement (Düğüm üst, Dize tagName) NodeList children = parent.getChildNodes (); (int i = 0, in = children.getLength () için; < in ; 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 düğüm olarak kabul ettiğini unutmayın. TEXT_NODE. Ek olarak, metin içeriği bitişik çoklu metin düğümlerine bölünebilir. Bu nedenle, bir öğenin içindeki metin içeriğini almak için aşağıdaki özel işlem gerekir.

statik özel String getCharacterData (Düğüm üst) StringBuilder text = new StringBuilder (); if (parent == null) return text.toString (); NodeList children = parent.getChildNodes (); (int k = 0, kn = children.getLength (); k için < kn ; 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ış, şimdi örnek XML'mizden bazı bilgileri listelemek için bazı koda bakalım. Her kitap için, bir kitap katalogunda bulunabilecekleri gibi ayrıntılı bilgiler göstermek istiyoruz..

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

XML Çıktısı Yazma

Java sağlar XML Tranform API XML verilerini dönüştürmek için. Bu API’yı kimlik dönüşümü çıktı üretmek.

Örnek olarak yeni ekleyelim: kitap Yukarıda sunulan örnek katalog eleman. Kitabın ayrıntıları (örneğin yazar, Başlık, etc) harici olarak, belki bir özellik 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 = Gurur ve Önyargı türü = Romantik fiyat = 6.99 publish_date = 2010-04-01 Description = "Evrensel olarak kabul edilmiş bir gerçek, iyi bir servete sahip olan tek bir erkeğin istemek zorunda olması gerektiği bir eş. " Gurur ve Önyargı başlıyor, Jane Austen'in tüm zamanların en popüler romanlarından biri olan görkemli komedi komedisi, gururlu Bay Darcy ve önyargılı Elizabeth Bennet arasında ruhlu mahkemelerini bir dizi ruhsatlı oyunda oynarken görkemli bir şekilde medeniyete kavuşuyor. onsekizinci yüzyıl salon entrikaları. 

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

Dosya dosyası =…; // Belgeyi okumak için XML dosyası. Document = builder.parse (file); Eleman kataloğu = document.getDocumentElement (); 

Verileri kullanarak özellikleri dosyasından yükleriz. Özellikleri Java ile sağlanan sınıf. Kod oldukça basit ve aşağıda gösterilmiştir.

Dize propsFile =…; Özellikler props = new Properties (); deneyin (FileReader in = new FileReader (propsFile)) props.load (in);  

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

Dize id = props.getProperty ("id"); Dize yazar = props.getProperty ("author"); Dize başlığı = props.getProperty ("title"); String genre = props.getProperty ("tür"); Dize fiyatı = props.getProperty ("price"); String publish_date = props.getProperty ("publish_date"); String descr = props.getProperty ("açıklama"); 

Şimdi boş bırakalım kitap eleman.

Element kitabı = document.createElement ("book"); book.setAttribute ("id", id); 

Alt öğeleri ekleme kitap önemsizdir. Kolaylık sağlamak için, gerekli öğe adlarını bir Liste ve değerleri bir döngü içine ekleyin.

Liste elnames = Arrays.asList ("yazar", "başlık", "tür", "fiyat", "publish_date", "açıklama"); için (String elname: elnames) Element el = document.createElement (elname); Metin metni = document.createTextNode (props.getProperty (elname)); el.appendChild (metin); book.appendChild (El);  catalog.appendChild (kitap); 

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

XML'i yazmak için bir örneğe ihtiyacımız var. transformatör aşağıda gösterildiği gibi yaratılmıştır. Not: Çıktı XML'in girintili olarak girilmesini istediğimizi unutmayın. setOutputProperty () yöntem.

TransformerFactory tfact = TransformerFactory.newInstance (); Transformatör tform = tfact.newTransformer (); tform.setOutputProperty (OutputKeys.INDENT, "yes"); tform.setOutputProperty ("http://xml.apache.org/xsltlet.indind-amount", "3"); 

XML çıktısının oluşturulmasındaki son adım, geçişi uygulamaktır. Sonuç çıkış akışında görünür, System.out.

tform.transform (yeni DOMSource (belge), yeni StreamResult (System.out)); 

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

tform.transform (yeni DOMSource (belge), yeni StreamResult (yeni Dosya ("output.xml"))); 

Ve bu, DOM API'sini kullanarak XML dosyalarını okuma ve yazma hakkındaki bu makaleyi sarar..

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




Henüz no comments

Modern teknoloji hakkında basit ve uygun fiyatlı.
Modern teknoloji dünyasında rehberiniz. Her gün bizi çevreleyen teknolojileri ve araçları nasıl kullanacağınızı ve Internet'te ilginç şeyleri nasıl keşfedeceğinizi öğrenin.