2016-03-23 17 views
0

Belge nesnelerine yüklemek istediğim res/xml dizinine bazı XML dosyaları yerleştirmeyi planlıyorum (bunları şu anda benim uygulamamda kullanıyorum ve am onları çok fazla geçirerek).XMLResourceParser sitesinden org.w3c.dom.Document alın

yapmak:

XMLResourceParser parser = getResources().getXml(R.xml.my_xml_file) 

sadece bir başlangıç ​​noktası olarak görünüyor ve XMLResourceParser düğümlerinin ağacın yineleme amaçlayan gibi görünüyor XmlPullParser, uygular.

Bu cevap kod uyarınca, belgenin kök düğümünü çekilmeye xpath kullanarak denedim: navigate through XML document with XMLpullParser, ama bu bu soruya göre bana bir istisna veriyor: Evaluating XPath an XmlResourceParser causes Exception

İdeal olarak, ihtiyacım İçeriği yerelleştirmek isteyeceğimiz gibi, xml dosyasını res/xml klasöründe tutmak için, bu nedenle res/raw veya res/assets öğesine taşınma bir seçenek değildir.

XmlResourceParser aracılığıyla yineleyen ve belgeyi oluşturan bir şeyi uygulamadan önce, bunu yapmanın daha basit bir yolu var mı?

cevap

1

XMLResourceParser aracılığıyla yinelenen kod yazmak, iyi bir şekilde iyi tasarlanmış bir geliştirici olduğunuzu gösterir. Ancak, evil genius seçeneğini kullanmak isteyebilirsiniz. İlk olarak, XmlResourceParser yapıcıda bir XmlPullParser uygulaması oluşturun, onu siler ve tüm yöntemlerini ona aktarır - tüm setInput -type yöntemleri hariç.Bunların hiçbiri op-olmayan saplama olmasını istersiniz, çünkü XmlResourceParser istisnalar atar (bkz. XmlBlock.java, hat 108 veya benzeri). Android stüdyosu temsilci yöntemlerini oluşturmayı otomatikleştirebilir, böylece tüm bunları el ile kodlamanıza gerek kalmaz.

PullParserWrapper wrapper = new PullParserWrapper(
      getResources().getXml(R.xml.my_xml_file)); 

Not: sarmalayıcı sınıf ad işleme ve diğer çeşitli şeyler kapatarak işlemek için bazı yöntem uygulamaları olan gerekebilir.

Daha sonra, ayrıştırıcı sarın ve bir XMLReader dönüştürmek için bir org.xmlpull.v1.sax2.Driver kullanacağız: bir kukla giriş kaynağını Şimdi kurmak

XMLReader xmlReader = new Driver(wrapper); 

(onun girişini nereden aldığını XmlResourceParser zaten biliyor):

012:
InputSource inputSource = new InputSource(new StringReader("")); 

Sonra bir DOM çıkışı için SAX girişini dönüştürmek ve sonuç almak için bir Transformer kullanmak

MWAH Ha Ha Ha Ha Ha Ha Ha!

+0

Wow! Bunu yapmayı düşünmemiştim! Bunu daha sonra bir bash vereceğim, sonra kabul et! – GHC

+0

Evil Genius Kulübüne hoş geldiniz. –

İlgili konular