Sevgili okuyucular, bunlar JAVA based XML Parsing Interview Questions konusu ile ilgili görüşmeniz sırasında karşılaşabileceğiniz soruların niteliğini öğrenmeniz için özel olarak JAVA based XML Parsing. Tecrübelerime göre, iyi mülakatçılar mülakatınız sırasında belirli bir soru sormayı pek planlamazlar, normalde sorular konuyla ilgili bazı temel kavramlarla başlar ve daha sonra daha fazla tartışmaya ve yanıtladığınız şeye dayanarak devam eder -
XML, Genişletilebilir Biçimlendirme Dili anlamına gelir.
XML'in sağladığı avantajlar aşağıdadır -
Technology agnostic- XML düz metin olduğundan teknolojiden bağımsızdır. Veri depolama ve aktarım amacıyla her türlü teknoloji tarafından kullanılabilir.
Human readable- XML, basit metin biçimini kullanır. İnsan tarafından okunabilir ve anlaşılabilir.
Extensible - XML'de özel etiketler çok kolay bir şekilde oluşturulabilir ve kullanılabilir.
Allow Validation - XSD kullanılarak, DTD ve XML yapısı kolaylıkla doğrulanabilir.
Aşağıda XML kullanımının dezavantajları verilmiştir -
Redundant Syntax - Normalde XML dosyası birçok tekrarlayan terim içerir.
Verbose-Ayrıntılı bir dil olan XML dosya boyutu, iletim ve depolama maliyetlerini artırır.
XML'in ayrıştırılması, verilere erişmek veya verileri bir şekilde değiştirmek için XML belgesinden geçmeyi ifade eder.
XML Ayrıştırıcı, bir XML belgesinde bulunan verilere nasıl erişileceğini veya değiştirileceğini sağlar. Java, XML belgesini ayrıştırmak için birden çok seçenek sunar.
Aşağıda, XML belgelerini ayrıştırmak için yaygın olarak kullanılan çeşitli ayrıştırıcı türleri verilmiştir -
Dom Parser - Belgenin tüm içeriğini yükleyerek ve eksiksiz hiearchical ağacını bellekte oluşturarak belgeyi ayrıştırır.
SAX Parser- Belgeyi olay tabanlı tetikleyicilerle ayrıştırır. Belgenin tamamını belleğe yüklemez.
JDOM Parser - Belgeyi DOM ayrıştırıcısına benzer şekilde, ancak daha kolay bir şekilde ayrıştırır.
StAX Parser - Belgeyi SAX ayrıştırıcısına benzer şekilde, ancak daha verimli bir şekilde ayrıştırır.
XPath Parser - XML'i ifadeye göre ayrıştırır ve XSLT ile birlikte yaygın olarak kullanılır.
DOM4J Parser - Java Collections Framework kullanarak XML, XPath ve XSLT'yi ayrıştırmak için bir java kitaplığı, DOM, SAX ve JAXP için destek sağlar.
DOM, Belge Nesne Modeli anlamına gelir.
DOM, Document Object Model anlamına gelir ve World Wide Web Consortium'un (W3C) resmi bir tavsiyesidir. Programların XML belgelerinin stiline, yapısına ve içeriğine erişmesini ve bunları güncellemesini sağlayan bir arabirim tanımlar. DOM'u destekleyen XML ayrıştırıcıları bu arabirimi uygular.
Şu durumlarda bir DOM ayrıştırıcısı kullanmalısınız -
Bir belgenin yapısı hakkında çok şey bilmeniz gerekir
Belgenin bazı kısımlarını hareket ettirmeniz gerekir (örneğin belirli öğeleri sıralamak isteyebilirsiniz)
Belgedeki bilgileri bir defadan fazla kullanmanız gerekiyor
Bir XML belgesini DOM ayrıştırıcısıyla ayrıştırdığınızda, belgenizin tüm öğelerini içeren bir ağaç yapısını geri alırsınız. DOM, belgenin içeriğini ve yapısını incelemek için kullanabileceğiniz çeşitli işlevler sağlar.
DOM, belge yapılarını işlemek için ortak bir arabirimdir. Tasarım hedeflerinden biri, DOM uyumlu bir ayrıştırıcı için yazılan Java kodunun, başka herhangi bir DOM uyumlu ayrıştırıcı üzerinde değişiklik yapılmadan çalışması gerektiğidir.
DOM, birkaç Java arayüzünü tanımlar. İşte en yaygın arayüzler -
Node - DOM'un temel veri türü.
Element - Ele alacağınız nesnelerin büyük çoğunluğu Öğelerdir.
Attr Bir elemanın bir niteliğini temsil eder.
Text Bir Eleman veya Attr'ın gerçek içeriği.
DocumentXML belgesinin tamamını temsil eder. Bir Belge nesnesine genellikle DOM ağacı denir.
DOM ile çalışırken, sıklıkla kullanacağınız birkaç yöntem vardır -
Document.getDocumentElement() - Belgenin kök öğesini döndürür.
Node.getFirstChild() - Belirli bir Düğümün ilk çocuğunu döndürür.
Node.getLastChild() - Belirli bir Düğümün son çocuğunu döndürür.
Node.getNextSibling() - Bu yöntemler, belirli bir Düğümün sonraki kardeşini döndürür.
Node.getPreviousSibling() - Bu yöntemler, belirli bir Düğümün önceki kardeşini döndürür.
Node.getAttribute(attrName) - Belirli bir Düğüm için, özniteliği istenen adla döndürür.
Evet! DOM ayrıştırıcısını kullanarak bir XML belgesini ayrıştırabilir, değiştirebilir veya oluşturabiliriz.
SAX, XML için Basit API anlamına gelir.
SAX Parser, xml belgeleri için olay tabanlı bir ayrıştırıcıdır.
SAX (XML için Basit API), xml belgeleri için olay tabanlı bir ayrıştırıcıdır. Bir DOM ayrıştırıcısından farklı olarak, SAX ayrıştırıcısı ayrıştırma ağacı oluşturmaz. SAX, XML için bir akış arabirimidir; bu, SAX kullanan uygulamaların, belgenin üstünden başlayıp kapanışıyla biten sıralı bir sırada bir öğe ve öznitelik işlenen XML belgesi hakkında olay bildirimleri aldığı anlamına gelir. KÖK öğesi.
SAX ayrıştırıcı kullanmalısınız -
XML belgesini yukarıdan aşağıya doğrusal bir şekilde işleyebilirsiniz.
Belge derinlemesine iç içe geçmiş değil
DOM ağacı çok fazla bellek tüketen çok büyük bir XML belgesini işliyorsunuz.Tipik DOM uygulamaları, bir bayt XML'i temsil etmek için on bayt bellek kullanır
Çözülmesi gereken sorun, XML belgesinin yalnızca bir kısmını içerir
Veriler ayrıştırıcı tarafından görülür görülmez kullanılabilir, bu nedenle SAX bir akış üzerinden gelen bir XML belgesi için iyi çalışır.
Yalnızca ileriye yönelik bir şekilde işlendiği için bir XML belgesine rastgele erişimimiz yok
Ayrıştırıcının gördüğü verileri takip etmeniz veya öğelerin sırasını değiştirmeniz gerekirse, kodu yazmalı ve verileri kendi başınıza depolamalısınız.
ContentHandler Arabirimi, SAX ayrıştırıcısının gördüğü XML belgesinin bileşenlerini uygulama programına bildirmek için kullandığı geri arama yöntemlerini belirtir.
void startDocument() - Bir belgenin başında çağrılır.
void endDocument() - Bir belgenin sonunda aranır.
void startElement(String uri, String localName, String qName, Attributes atts) - Bir elemanın başında çağrılır.
void endElement(String uri, String localName,String qName) - Bir elemanın sonunda çağrılır.
void characters(char[] ch, int start, int length) - Karakter verisiyle karşılaşıldığında çağrılır.
void ignorableWhitespace( char[] ch, int start, int length) - Bir DTD mevcut olduğunda ve ihmal edilebilir bir boşlukla karşılaşıldığında çağrılır.
void processingInstruction(String target, String data) - Bir işleme talimatı tanındığında çağrılır.
void setDocumentLocator(Locator locator)) - Belgedeki konumları tanımlamak için kullanılabilecek bir Konum Belirleyici sağlar.
void skippedEntity(String name) - Çözümlenmemiş bir varlıkla karşılaşıldığında çağrılır.
void startPrefixMapping(String prefix, String uri) - Yeni bir ad alanı eşlemesi tanımlandığında çağrılır.
void endPrefixMapping(String prefix) - Bir ad alanı tanımı kapsamını bitirdiğinde çağrılır.
Öznitelikler Arabirimi, bir öğeye bağlı özniteliklerin işlenmesine yönelik yöntemleri belirtir.
int getLength() - Özniteliklerin sayısını verir.
String getQName(int index)
String getValue(int index)
String getValue(String qname)
Hayır! SAX ayrıştırıcısını kullanarak, yalnızca bir XML belgesini ayrıştırabilir veya değiştirebiliriz.
JDOM, XML belgesini ayrıştırmak için açık kaynaklı, java tabanlı bir kitaplıktır ve genellikle java geliştirici dostu API'dir.
Java optimizasyonludur, List ve Arrays gibi java koleksiyonunu kullanır. DOM ve SAX API'leri ile çalışır ve ikisinin en iyilerini birleştirir. Düşük bellek ayak izine sahiptir ve neredeyse SAX kadar hızlıdır.
Ne zaman bir JDOM ayrıştırıcısı kullanmalısınız -
Bir belgenin yapısı hakkında çok şey bilmeniz gerekir.
Belgenin bölümlerini hareket ettirmeniz gerekir (örneğin, belirli öğeleri sıralamak isteyebilirsiniz).
Belgedeki bilgileri bir defadan fazla kullanmanız gerekiyor.
Bir java geliştiricisisiniz ve java için optimize edilmiş XML çözümlemesinden yararlanmak istiyorsunuz.
Bir XML belgesini JDOM ayrıştırıcısıyla ayrıştırdığınızda, uygulamanın bellek ayak izini etkilemeden belgenizin tüm öğelerini içeren bir ağaç yapısını geri alma esnekliğine sahip olursunuz. JDOM, belgenin iyi yapılandırılması ve yapısının bilinmesi durumunda belgenin içeriğini ve yapısını incelemek için kullanabileceğiniz çeşitli yardımcı işlevler sağlar.
JDOM, java geliştiricilerine esneklik ve xml ayrıştırma kodunun kolay bakımı sağlar. Hafif ve hızlı API'dir.
JDOM, birkaç Java sınıfını tanımlar. İşte en yaygın sınıflar -
Document- XML belgesinin tamamını temsil eder. Bir Belge nesnesine genellikle DOM ağacı denir.
Element- Bir XML öğesini temsil eder. Öğe nesnesi, alt öğelerini, metnini, niteliklerini ve ad alanlarını değiştirmek için yöntemlere sahiptir.
AttributeBir elemanın bir niteliğini temsil eder. Özniteliğin özniteliğin değerini alma ve ayarlama yöntemi vardır. Ebeveyn ve öznitelik türüne sahiptir.
Text XML etiketinin metnini temsil eder.
Comment Bir XML belgesindeki yorumları temsil eder.
JDOM ile çalışırken, sıklıkla kullanacağınız birkaç yöntem vardır -
SAXBuilder.build(xmlSource) - JDOM belgesini xml kaynağından oluşturun.
Document.getRootElement() - XML'in kök öğesini alın.
Element.getName() - XML düğümünün adını alın.
Element.getChildren() - Bir elemanın tüm doğrudan alt düğümlerini alın.
Node.getChildren(Name) - Belirli bir ada sahip tüm doğrudan alt düğümleri alın.
Node.getChild(Name) - Verilen ada sahip ilk alt düğümü alın.
Evet! JDOM ayrıştırıcısını kullanarak bir XML belgesini ayrıştırabilir, değiştirebilir ve oluşturabiliriz.
StAX, XML belgesini SAX ayrıştırıcısının yaptığı gibi ayrıştırmak için JAVA tabanlı bir API'dir, ancak StAX, SAX'in bir PUSH API olduğu bir PULL API'sidir. Bu, StAX ayrıştırıcı durumunda, istemci uygulamasının StAX ayrıştırıcısına ihtiyaç duyduğunda XML'den bilgi almasını istemesi gerektiği anlamına gelir, ancak SAX ayrıştırıcısı olması durumunda, SAX ayrıştırıcısı istemci uygulamasına bilginin mevcut olduğunu bildirdiğinde bilgi almak için istemci uygulaması gerekir.
Evet! StAX ayrıştırıcısını kullanarak bir XML belgesini ayrıştırabilir, değiştirebilir ve oluşturabiliriz.
Evet! StAX bir PULL API'sidir.
Şu durumlarda bir StAX ayrıştırıcı kullanmalısınız -
XML belgesini yukarıdan aşağıya doğrusal bir şekilde işleyebilirsiniz.
Belge derinlemesine iç içe geçmiş değil.
DOM ağacı çok fazla bellek tüketen çok büyük bir XML belgesini işliyorsunuz. Tipik DOM uygulamaları, XML baytını temsil etmek için on bayt bellek kullanır.
Çözülmesi gereken sorun, XML belgesinin yalnızca bir kısmını içerir.
Veriler, ayrıştırıcı tarafından görülür görülmez kullanılabilir durumdadır, bu nedenle StAX, bir akış üzerinden gelen bir XML belgesi için iyi çalışır.
Yalnızca ileriye yönelik bir şekilde işlendiği için bir XML belgesine rastgele erişimimiz yok
Ayrıştırıcının gördüğü verileri takip etmeniz veya öğelerin sırasını değiştirmeniz gerekirse, kodu yazmalı ve verileri kendi başınıza depolamalısınız.
Bu sınıf, XML belgesini ayrıştırırken meydana gelen olayları yinelemek için kullanılabilen olayların yinelemesini sağlar.
StartElement asStartElement() - öğenin değerini ve özelliklerini almak için kullanılır.
EndElement asEndElement() - bir elemanın sonunda çağrılır.
Characters asCharacters() - CDATA, boşluk vb. karakterleri elde etmek için kullanılabilir.
Bu arayüz, bir olay yaratma yöntemlerini belirtir.
add(Event event) - XML'e öğeler içeren olay ekleyin.
Bu sınıf, XML belgesini ayrıştırırken meydana gelen olayları yinelemek için kullanılabilen olayların yineleyicisini sağlar.
int next() - sonraki olayı almak için kullanılır.
boolean hasNext() - başka olayların olup olmadığını kontrol etmek için kullanılır
String getText() - bir elemanın metnini almak için kullanılır
String getLocalName() - bir elemanın adını almak için kullanılır
Bu arayüz, bir olay yaratma yöntemlerini belirtir.
writeStartElement(String localName) - Verilen adın başlangıç öğesini ekleyin.
writeEndElement(String localName) - Verilen adın son öğesini ekleyin.
writeAttribute(String localName, String value) - Bir elemanın niteliğini yazın.
XPath, World Wide Web Konsorsiyumu'nun (W3C) resmi bir tavsiyesidir. Bir XML dosyasında bilgi bulmak için bir dil tanımlar. Bir XML belgesinin öğelerini ve niteliklerini geçmek için kullanılır. XPath, XML belgesinden ilgili bilgileri sorgulamak için kullanılabilecek çeşitli türden ifadeler sağlar.
Aşağıdakiler XPath'in temel bileşenleridir -
Structure Definitions - XPath, bir XML belgesinin öğe, öznitelik, metin, ad alanı, işleme talimatı, yorum ve belge düğümleri gibi bölümlerini tanımlar.
Path Expressions XPath, güçlü yol ifadeleri, XML belgelerindeki düğümleri veya düğümlerin listesini sağlar.
Standard FunctionsXPath, dizi değerlerinin, sayısal değerlerin, tarih ve saat karşılaştırmasının, düğümün ve QName işleminin, sıra işleminin, Boole değerlerinin vb. İşlenmesi için standart işlevlerden oluşan zengin bir kitaplık sağlar.
Major part of XSLTXPath, XSLT standardındaki ana unsurlardan biridir ve XSLT belgeleriyle çalışmak için bilgi sahibi olması gerekir.
W3C recommendationXPath, World Wide Web Consortium'un (W3C) resmi tavsiyesidir.
Dayanak, belirli bir düğümü veya belirli bir değeri içeren bir düğümü bulmak için kullanılır ve [...] kullanılarak tanımlanır.
İfade | Sonuç |
---|---|
/ sınıf / öğrenci [1] | Sınıf öğesinin çocuğu olan ilk öğrenci öğesini seçer. |
/ sınıf / öğrenci [son ()] | Sınıf öğesinin çocuğu olan son öğrenci öğesini seçer. |
/ sınıf / öğrenci [son () - 1] | Sınıf öğesinin çocuğu olan son ancak bir öğrenci öğesini seçer. |
// öğrenci [@ rollno = '493'] | '493' değerine sahip rollno adlı bir özelliğe sahip tüm öğrenci öğelerini seçer |
XPath, bir xml belgesinden düğüm veya düğüm listesi seçmek için bir yol ifadesi kullanır. Aşağıda, bir xml belgesinden herhangi bir düğüm / düğüm listesi seçmek için yararlı yollar ve ifadelerin listesi verilmiştir.
İfade | Açıklama |
---|---|
düğüm adı | Verilen "düğüm adı" adlı tüm düğümleri seçin |
/ | Seçim kök düğümden başlar |
// | Seçim, seçimle eşleşen geçerli düğümden başlar |
. | Mevcut düğümü seçer |
.. | Mevcut düğümün ebeveynini seçer |
@ | Öznitelikleri seçer |
Öğrenci | Örnek - "öğrenci" adındaki tüm düğümleri seçer |
sınıf / öğrenci | Örnek: Sınıfın çocukları olan tüm öğrenci öğelerini seçer |
//Öğrenci | Belgenin neresinde olurlarsa olsunlar tüm öğrenci öğelerini seçer |
Hayır! XPath ayrıştırıcısı, yalnızca XML Belgesinde gezinmek için kullanılır. XML oluşturmak için DOM ayrıştırıcı kullanmak daha iyidir.
DOM4J, XML belgesini ayrıştırmak için açık kaynak kodlu, java tabanlı bir kitaplıktır ve oldukça esnek, yüksek performanslı ve bellek açısından verimli bir API'dir. Java optimizasyonludur, List ve Arrays gibi java koleksiyonunu kullanır. DOM, SAX, XPath ve XSLT ile çalışır. Bellek alanı çok düşük olan büyük XML belgesini ayrıştırabilir.
Şu durumlarda bir DOM4J ayrıştırıcısı kullanmalısınız -
Bir belgenin yapısı hakkında çok şey bilmeniz gerekir
Belgenin bazı kısımlarını hareket ettirmeniz gerekir (örneğin belirli öğeleri sıralamak isteyebilirsiniz)
Belgedeki bilgileri bir defadan fazla kullanmanız gerekiyor
Bir java geliştiricisisiniz ve java için optimize edilmiş XML çözümlemesinden yararlanmak istiyorsunuz.
Bir XML belgesini DOM4J ayrıştırıcısıyla ayrıştırdığınızda, uygulamanın bellek ayak izini etkilemeden belgenizin tüm öğelerini içeren bir ağaç yapısını geri alma esnekliğine sahip olursunuz. DOM4J, belgenin iyi yapılandırılmış olması ve yapısının bilinmesi durumunda belgenin içeriğini ve yapısını incelemek için kullanabileceğiniz çeşitli yardımcı işlevler sağlar. DOM4J, XML belgesinde gezinmek için XPath ifadesini kullanır.
DOM4J, java geliştiricilerine esneklik ve xml ayrıştırma kodunun kolay bakımı sağlar. Hafif ve hızlı API'dir.
DOM4J birkaç Java sınıfını tanımlar. İşte en yaygın sınıflar -
Document- XML belgesinin tamamını temsil eder. Bir Belge nesnesine genellikle DOM ağacı denir.
Element- Bir XML öğesini temsil eder. Öğe nesnesi, alt öğelerini, metnini, niteliklerini ve ad alanlarını değiştirmek için yöntemlere sahiptir.
AttributeBir elemanın bir niteliğini temsil eder. Özniteliğin özniteliğin değerini alma ve ayarlama yöntemi vardır. Ebeveyn ve öznitelik türüne sahiptir.
Node Eleman, Nitelik veya İşleme Talimatını temsil eder
DOM4J ile çalışırken, sıklıkla kullanacağınız birkaç yöntem vardır -
SAXReader.read(xmlSource)() - DOM4J belgesini xml kaynağından oluşturun.
Document.getRootElement() - XML'in kök öğesini alın.
Element.node(index) - XML düğümünü öğedeki belirli dizinde alın.
Element.attributes() - Bir elemanın tüm özelliklerini alın.
Node.valueOf(@Name) - Belirli bir öğe adına sahip bir özniteliğin değerini alın.
Evet! DOM4J ayrıştırıcısını kullanarak bir XML belgesini ayrıştırabilir, değiştirebilir ve oluşturabiliriz.
Ayrıca konuyla ilgili yaptığınız geçmiş ödevlerinizi gözden geçirebilir ve onlar hakkında kendinizden emin bir şekilde konuşabileceğinizden emin olabilirsiniz. Eğer daha tazeyseniz, görüşmeci çok karmaşık soruları yanıtlamanızı beklemiyor, bunun yerine temel kavramlarınızı çok güçlü hale getirmelisiniz.
İkincisi, birkaç soruya cevap verememeniz gerçekten önemli değil, ancak ne cevaplarsanız cevap vermiş olmanız önemlidir. Bu yüzden görüşmeniz sırasında kendinizden emin olun. Tutorialspoint olarak, iyi bir mülakatçıya sahip olmanız için en iyi şansları ve gelecekteki çabanız için en iyisini diliyoruz. Şerefe :-)