JDOM:KKK

Link: http://www.jdom.org/docs/faq.html

  • Mis on JDOM?
  • Mis on JDOM mitte?
  • On JDOM lühend?
  • Mis on JDOM litsentsi?
  • Kust ma saan JDOM?
  • Mis Maven artefakt tuleks kasutada?
  • Mis on JDOM Filosoofia?
  • Miks on JDOM API määratletud konkreetsed klassid, mitte liidesed?
  • Kuidas JDOM tööd DOM ja SAX?
  • Oli JDOM mõeldud Generics?
  • olen proovinud kasutada JDOM ja veateade, näiteks: java.lang.NoSuchMethodError või java.lang.NoClassDefFoundError: org/xml/sax/SAXNotRecognizedException
  • Mida sa mõtled “Tavalise extension directory”?
  • Kuidas vältida DOM Tase 1 probleem Visuaalne Vanus Java?
  • Kuidas vältida DOM Tase 1 probleem WebSphere?
  • Mida JDOM versioon, mis töötab, mis on JDK?
  • kas On mingeid jõudluse numbrid?
  • Kuidas JDOM integreerida XSLT?
  • On seal XPath tuge JDOM?
  • Milliseid funktsioone XML ei ole täielikult tegeleb JDOM?
  • On JDOM lõng on ohutu?
  • Miks equals() teha ainult == kontrollida?
  • Miks equals() deklareeritud lõplik?
  • Kuidas ma ehitada Dokument, String?
  • Kuidas eemaldada Element või muu sisu?
  • Kuidas ma liikuda Elemendi ühest kohast teise?
  • Kuidas kopeerida Elemendi ühest kohast teise?
  • Saab elemendi või atribuudi nimi sisaldada koolon?
  • Miks ma pean läbima Nimeruum getChild(), kui laps element, mis ma otsin on nr nimeruumi deklaratsiooni?
  • Kui ma jätan välja nimeruumis alates teise kõne getChild(), kui ta tagastab null. Miks?
  • Miks kõik uued read ilmuvad \n, isegi Windows?
  • Miks ei setText(“ ”) mitte seda, mida ma tahan?
  • Kui kasutad IDE siluri miks ma näen kummaline ArrayIndexOutOfBoundsException?
  • Kuidas lisada PI või Kommenteerida enne root element?
  • Kuidas vältida saada OutOfMemoryError?
  • Miks minu faili kodeeringu kohta väljund ei sobi kodeeringu kohta sisend?
  • Miks ei kulgeb dokument, läbi pistikupesa mõnikord riputada parser?
  • Kuidas hoida DTD laadimist? Isegi, kui ma välja lülitada kinnitamine parser üritab laadida DTD faili.
  • Kuidas ma kinnitada vastu skeemi kasutamisel JDOM 2.x?
  • Kuidas ma kinnitada vastu skeemi kasutamisel JDOM 1.x?
  • Kuidas ma saan täita mälu kinnitamine vastu DTD või Skeemi?
  • JDOM tagab dokumendi mällu on alati hästi moodustatud. Võib JDOM tagama ka dokumendi mällu on alati kehtiv?
  • Miks ma saan IndexOutOfBoundsException või ConcurrentModificationException kohta silmuspõletamise?
  • On arhiivi jaoks JDOM meililistide?
  • Kuidas ma tühista meililist?
  • Kuidas postitada meililist on mitu aadress?
  • Peaks ma küsin üldine XML küsimused ja Jason, Brett, või Rolf?
  • raamatu Java ja XML-i räägib JDOM 1.0; miks segadust?
  • mul on küsimus, et ei ole vastanud siin. Mida teha?
  • Kuidas esitada bug report?
  • Kust ma saan lisateavet?

Mis on JDOM?

JDOM on, lihtsalt, Java esitus XML-dokument. JDOM pakub võimalus esindada, et dokument on lihtne ja tõhus lugemine, manipuleerimise ja kirjutamine. See on lihtne API, on kerge ja kiire, ja on optimeeritud Java programmeerija. See on alternatiiv DOM ja SAX, kuigi ta suudab hästi nii DOM ja SAX.

Mis on JDOM mitte?

JDOM on ei ole wrapper for W3C DOM, või teine versioon DOM. JDOM on Java-põhine “document object model” XML-failid. JDOM teenib sama eesmärki nagu DOM, kuid on lihtsam kasutada.

JDOM ei ole XML-parser, nagu Xerces või Karmiinpunane. See on dokument, objekti mudeli, mis kasutab XML-jäsentimiä ehitada dokumendid. JDOM ‘ SAXBuilder klassi näiteks kasutab SAX sündmuste loodud XML-parser ehitada JDOM puu. Vaikimisi XML-parser kasutada JDOM on JAXP-valitud parser, kuid JDOM saab kasutada peaaegu iga parser.

On JDOM lühend?

Nope. Just nagu JDBC ei ole ametlikult lühend, samuti ei ole JDOM. See tagab, et me vastama Päike on kaubamärgi eeskirjad, nagu on selgitatud aadressil http://www.sun.com/policies/trademarks.

Mis on JDOM litsentsi?

JDOM on saadaval alusel Apache-stiilis avatud lähtekoodiga litsents, tunnustus klausel eemaldada. See litsents on ühed kõige vähem piirava litsentsi saadaval, mis võimaldab arendajatel kasutada JDOM luua uusi tooteid, ilma neid vabastama oma tooteid nagu avatud lähtekoodiga. See on litsentsi mudelist, mida Apache Projekt, mis loodi Apache server. Litsents on olemas ülaosas iga lähtefaili ja LICENSE.txt juur jaotust.

Kust ma saan JDOM?

JDOM on saadaval binaar ja source kujul http://www.jdom.org.

JDOM on saadaval ka maven kesk-kontserni ‘org.jdom ” artefakt ID jdom JDOM 1.x (ja mõned varasemad 2.x versioonid): JDOM 1.x Esemeid kohta maven, või artefakt ID jdom2 JDOM 2.x: JDOM 2.x Esemeid kohta maven

täieliku lähtekoodi hoidla on hooldatud sisse GitHub.

Mis Maven artefakt tuleks kasutada?

Kõik JDOM versioonid on kättesaadavad “jdom’ või ‘jdom2’ artefakt selles org.jdom grupp sisse Maven. Kui maven esemeid on jama varase JDOM 2.x versioonid, mis on kantud “jdom’ esemeid, ja hiljem 2.x versioonid “jdom2′ artefakt. Maven ei võimalda kinnitamine vigu, nii maven kasutajad wil lihtsalt elada nii, nagu ta on.

Kui teie projekt on üks, mis nõuab nii JDOM 1.x ja 2.x, siis saate kasutada ka ‘jdom-legacy’ artefakt tõmba versioon 1.1.3 (või uuem 1.x versioon).

Mis on JDOM Filosoofia?

JDOM on olnud ja on jätkuvalt töötatakse selle filosoofia:

  • JDOM peaks olema arusaadav Java programmeerijad.
  • JDOM peaks toetama lihtne ja tõhus, dokumendi muutmine.
  • JDOM peaks peida keerukust XML-kui vähegi võimalik, jäädes samal ajal truuks XML-kirjeldus.
  • JDOM tuleks integreerida DOM ja SAX.
  • JDOM peaks olema kerge ja kiire.
  • JDOM tuleks lahendada 80% (või rohkem) Java/XML probleemide 20% (või vähem) püügikoormuse

Miks on JDOM API määratletud konkreetsed klassid, mitte liidesed?

Seda küsimust on arutatud mitu korda JDOM meililist, mitu inimest mõlemalt poolt. Üldiselt, paljud inimesed tunnevad, et a-klassi baasil API on parem, kui subclassing ei ole vaja, samas kui kasutajaliides-põhise API on parem, kui subclassing on vaja. Aga, kas süsteemi saab kasutada mõlemal juhul.

Jason Hunter kokkuvõte argumentide vastu kasutajaliides-põhise API JDOM:

Koos liideste kõik muutub tehas, elemendid peavad olema “imporditud” uutele dokumentidele, selle asemel, et lihtsalt lisatud funktsioone, nagu pikaajaline serialization ei saa garanteerida, ja nimekiri läheb edasi.

Me hakkasime koos liideste tegelikult. Ajal meie pre-release läbi vaadata, et mõned eakaaslased me saanud tagasisidet, me peaksime püüdma konkreetsed klassid. Me tegime, ja selle kujundus oli palju parem.

Mõtle, java.io.File nagu analoogia. Seal on põhjus, miks me öelda, et:

File parent = new File(filepath);
File child = new File(parent, "aaa.txt");

mitte

FileSystem fs = FileSystem.getDefaultFileSystem();
File parent = fs.getFile(filepath);
File child = fs.getFile(parent, "aaa.txt");

esimene on lihtsalt lihtsam ja mõnusam tulla.

Teine punkt on meeles pidada, on see, et midagi, mida saab teha koos liideste saab teha subclassing – ainus karistus on võib-olla kasutamata muutujate baasi klassi.

viide, viimane meililisti arutelu selle teema alustatud Nov. 30, 2000 “Liidesed”, ja jätkas “Kasutajaliides-põhise JDOM” ja “Kuulutab: JDOMPlus”. See aitaks vaadata seda arutelu enne, tuues selle teema üles meililisti.

Kuidas JDOM tööd DOM ja SAX?

JDOM dokumente saab ehitatud XML-failid, DOM puud, SAX sündmuste või muu allikas. JDOM dokumente saab teisendada XML-failid, DOM puud, SAX sündmuste või mis tahes muusse sihtkohta. See võime osutub kasulik näiteks siis, kui lõimub programmi, mis ootab SAX sündmused. JDOM saab sõeluda XML-faili, lase programmeerija lihtsalt ja tõhusalt manipuleerida dokument, siis tule SAX sündmuste teine programm otse – nr ülemineku serialized format on vajalik.

Oli JDOM mõeldud Generics?

JDOM eesmärk oli enne geneeriliste ravimite, kuid JDOM 2.x on võtnud tõestatud disaini JDOM 1.x ja pikendas seda kasutada geneeriliste ravimite kui võimalik. Täpsemalt, kõik Kogude baasil toimingud nõuavad nõuetekohaselt trükitud sisendid ja tagastab nõuetekohaselt trükitud tulemusi. Lisaks JDOM 2.x kasutab ära teiste Java 5 funktsioone, nagu varargs ja co-variant tagasi tüüpi.

Generics: Element.getAttributes() tagastab List<Atribuut>, Element.getChildren() tagastab List<Element>, jne.

Co-variant Tagasi Liigid: Element.clone() tagastab Element, Tekst.eraldage() tagastab Teksti, jne.

olen proovinud kasutada JDOM ja saada viga nagu see:

java.lang.NoSuchMethodError
    or
java.lang.NoClassDefFoundError: org/xml/sax/SAXNotRecognizedException

Mis viga?

Teil on vaja tagada, et xerces.jar file kaasas JDOM allalaadimine on teie classpath enne muud XML-klassid, nagu need, mis tulevad koos JAXP või Karmiinpunane. Need teised XML-raamatukogud, samuti vanemad versioonid Apache Xerces, toetust, DOM Tase 1 ja SAX 1.0, ei ole vaja DOM Level 2 ja SAX 2.0. Tulemus on erand visatakse. Kontrollige oma classpath, ja proovige uuesti. Kui classpath tundub OK, problemaatiline PURK võib ka olla peidus süsteem on standard extension kataloog (vt järgmine).

Mida sa mõtled “Tavalise extension directory”?

standard extension kataloog on kataloog, mis sisaldab JAR failid, et otsitakse automaatselt, et Java runtime ja kompilaator. Kui olete installinud JDK (mitte lihtsalt JRE) võite ka on kaks eraldi ext kataloogid, millest üks on koostamisel kasutatud (tavaliselt kuskil nagu C:\jdk1.3\jre\lib\ext) ja muud, mida kasutatakse koodi käivitamist (tavaliselt kuskil nagu C:\Program Files\JavaSoft\jre\1.3\lib\ext). Vale JAR faili kas kataloog on võimalik saada oma teed (kuigi eri aegadel). Lisaks, õige JAR fail peab olema mõlemasse kataloogi.

Kuidas vältida DOM Tase 1 probleem Visuaalne Vanus Java?

Kui WTE funktsioon on lisatud töökohta, projekti “IBM-i XML-i Parser Java” on lisatud ka. See projekt sisaldab vana DOM Tase 1 ‘org.w3c.*’ liidesed. JDOM tugineb DOM Level 2, ja seetõttu conficts selle projektiga. Lahendus on teha järgmist:

  1. Muuda workspace ‘ i omanik, et Administraator
  2. Luua avatud väljaanne projekti “IBM-i XML-i Parser Java’
  3. Kustuta kõik paketid, mis sisaldavad org.w3c.* liidesed
  4. Versioon projekti.
  5. Loo uus Projekt, DOM Tase 2 parser nagu Xerces
  6. Impordi kõik Xerces klasside sealhulgas org.w3c.* liidesed (võid kasutada completly erineva projekti jaoks need liidesed, kui soovite töötada koos teiste jäsentimiä)
  7. Versioon Xerces projekt
  8. Loo JDOM projekti ja impordi jdom klasside sinna. Versioon projekt

(contributed  Guy Nirpaz)

Kuidas vältida DOM Tase 1 probleem WebSphere?

WebSphere on sama probleem DOM Tase 1 liidesed nagu VAJ eespool. Lahendus on teha üks järgnevat:

  • Pane tee xerces.jar (või muud DOM Level 2 liidesed) muutuja ‘com.ibm.ejs.sm.adminserver.classpath‘ faili admin.config. See elab $WAS_ROOT$/bin enne, kui kõik muud muutujad.
  • või, kui sa jooksed OLI $WAS_ROOT/bin/debug/adminserver.{pvt|sh} lisa rida ” set WAS_CP=xerces.jar ” (või muud DOM Level 2 liidesed) enne teisi set WAS_CP objekt.
  • või, lisa JDOM, et rakendus serveri CLASSPATH, kasutades kas admin.cfg faili või administration console.

(contributed Mees Nirpaz)

Mida JDOM versioon, mis töötab, mis on JDK?

JDOM 1.x versioonid toetavad JDK 1.2 ja hiljem.

JDOM 2.x versioonid toetavad JDK 1.5 ja hiljem.

On olemas jõudluse numbrid?

JDOM 2.x arengu protsessi kaasatud kriteeriumid jälgimise võimekuse muutusi. Seal on jõudluse numbrid võrrelda erinevaid versioonid JDOM 2.x, samuti võrrelda tulemuslikkuse JDOM erinevatel JDK versiooni.

Dennis Sosnoski varem jooksis võrdlusaluseid. Üldiselt, kõige XML objekti mudelid on sarnane naabruses.

Kuidas JDOM integreerida XSLT?

Seal on palju võimalusi, et teha XSL muudab koos JDOM. Kõige lihtsam viis on kasutada tavalist JAXP Transformer liidese ja JDOMSource/JDOMResult leitud klassid org.jdom2.muuta pakett. Vaatan, et proovi nimega XSLTransform näide.

On olemas XPath tuge JDOM?

Jah! See on täielikult integreeritud org.jdom2.xpath nagu Beta-9, mis põhinevad Jaxen.

Millised omadused XML ei ole käsitletud JDOM?

mitte midagi, mida me ei tea.

On JDOM lõng on ohutu?

tuumiku API on tahtlikult ei lõng ohutu. Teisisõnu, ei ole sünkroniseeritud plokid jooksul org.jdom. See otsus mõistlik, sest me ootame esmane JDOM kasutada juhtudel:

  • Ühekordse loeb XML-stream arvesse JDOM ja vaatleb seda lugeda ainult
  • Ühekordse loeb XML-stream arvesse JDOM ja modifitseerib seda
  • Ühekordse loeb XML-stream arvesse JDOM ja muudab selle kättesaadavaks run time süsteem ainult lugemisõiguse

kasutamine juhul, kui “Ühekordse loeb XML-stream arvesse JDOM ja paljastab see, et mitu lõnga, et muuta oma sisu” on üsna haruldane. Sel juhul JDOM saab veel teha lõng ohutu, kuid programmeerija lihtsalt peab täitma oma sünkroonimine, ehk nagu sünkroonimine Dokumendi astme kohtus.

teiselt poolt, seal on teatud funktsioone, mis nõuavad “töökorras” osad, JDOM tuleb Lõng ohutu:

  • org.jdom2.Nimeruum.getNamespace() on ohutu
  • Kõik tehase-tüüpi klassid on ohutu (XPathFactory, jne.)

Miks equals() teha ainult == vaadata?

JDOM kaks Sisu objektid on ainult võrdseks, kui nad on täpselt sama eseme. See võimaldab kõne nagu list.remove(elem) eemalda ainult täpse Element läbinud, ei ole mis tahes osa, mis on samaväärne. See on väga oluline erinevus. Teeme täieliku equals() Element oleks vaja recursing alla puu, ja üldiselt me usume, et see ebatõenäoline, et sa tahad teada, kui see element ja kõik tema lapsed on samaväärsed veel üks. Kui sa tõesti ei taha teada, võite kirjutada mõned võrdlus-kood ise, mis kontrollib ainult nii palju, kui soovite kontrollida (äkki nimi/namespaces ainult) selle asemel, et teeme täieliku recurse.

Miks equals() deklareeritud lõplik?

equals() meetodid on lõplik JDOM Sisu klassid nii, et alamklass ei saa murda == käitumine, mis on vajalik nõuab näiteks list.remove(elem) tööle nii, nagu kavandatud. Samuti hashCode() meetodid on ka lõplik (säilitada võrdub/hashCode leping).

Kuidas luua Dokument, String?

kasutate standardset Java IO raamatukogu kutsub. Wrap String a StringReader ja anna lugejale SAXBuilder:

Document doc = builder.build(new StringReader(xml));

Kuidas eemaldada Element või muu sisu?

Kasuta meetodite kohta, List tagasi getChildren() või getContent(). JDOM ei vaja spetsiaalseid meetodeid, sest meetodid on juba olemas List. Näiteks eemaldada element nimekirjast lapsed:

List children = parent.getChildren();
children.remove(element); // given child
children.remove(0);       // first child

Muud meetodid Nimekirja pakuvad võimalusi, et eemaldada kõik lapsed, lisada lapse teatavas kohas, ja nii edasi.

Kui teil on konkreetne Element või muu Sisu, mida soovite loendist eemaldada, tema vanem, saab eemaldada Sisu, Content.detach() meetodit.

Kuidas ma liikuda Elemendi ühest kohast teise?

pole vaja node “importing” nagu on DOM. Lihtsalt eemaldada element oma praeguse koha, seejärel lisage osa tema uus koht. Elemendi sisu (kaasa arvatud selle element lapsed) on loomulikult “tag” mööda sõita. Teil on eemaldada element, enne kui lisada see, et tema uus koht, sest osad võivad olla ainult üks vanem tagastatud getParent().

newParent.addContent(elt.detach());

Kuidas kopeerida Elemendi ühest kohast teise?

pole vaja node “import” nagu on DOM. Lihtsalt kloon element on kopeerida ja lisada oma klooni oma uues kohas. Sul on kloon element, enne kui lisada see, et tema uus koht, sest osad võivad olla ainult üks vanem tagastatud getParent().

newParent.addContent(elt.clone());

Saate elemendi või atribuudi nimi sisaldada koolon?

XML 1.0 spetsifikatsiooni konkreetselt jätab endale koolon iseloomu kasutamiseks XML-Namespaces. Muud kasutamist pole vastavuses XML 1.0. Seetõttu JDOM ei ole võimalik luua element või atribuut nimed, mis sisaldavad colons, välja arvatud juhul, kui kasutate namespaces. Lisaks, kuna teed namespaces rakendatakse JDOM, te ei saa lihtsalt luua Element või Atribuut täielikult kvalifitseeritud nime nagu svg:title. Mis on te ei saa seda teha:

Element e = new Element("svg:title");

selle Asemel, peate jagada kahte ossa arvesse Namespace ja kohalike nimi. See on õige JDOM viis luua elementi nimeruum:

Element e = 
  new Element("title", "svg", "http://www.w3.org/2000/svg");

esimene argument on koha nimi. Teine argument on eesliide. Kolmas argument on nimeruumis URI.

Kui sa üritad luua xml:lang ja xml:space atribuudid kasutada:

Element e = 
  new Element("lang", Namespace.XML_NAMESPACE);

Miks ma pean läbima Nimeruum getChild(), kui laps element, mis ma otsin on nr nimeruumi deklaratsiooni?

Konkreetselt, seda XML-fragment:

<x>
  <y xmlns="http://foo.com">
    <z />
  </y>
</x>

Sa pead kasutama kood selline:

Namespace ns = Namespace.getNamespace("http://foo.com");
Element y = x.getChild("y", ns);
Element z = y.getChild("z", ns);

 

Kui ma jätan välja nimeruumis alates teise kõne getChild(), kui ta tagastab null. Miks?

JDOM töötab loogiline mälu XML puu, ei tekstiline esindus-ketas. Kuigi element z on nr nimeruumi deklaratsioon, see on nimeruum – üks on päritud tema vanem, mis kinnitab vaikimisi namespace (seotud URI http://foo.com).
Vastavalt namespaces spetsifikatsioon, järgmine XML-fragment on identsed, mis tähendab, et eelmine:

Namespace ns = Namespace.getNamespace("http://foo.com");
Element y = x.getChild("y", ns);
Element z = y.getChild("z", ns);

nii, et JDOM API käepidemed namespaces tähendab, et teil on võimalik kirjutada koodi, mis töötab nii näited. Vastasel korral oleks on vaja koodi, et kontrollida iga juhtumi puhul eraldi.

Samamoodi, kui sa olid ehitamisel (mitte lugemine) XML esimeses näites, siis oleks vaja koodi kirjutada niimoodi:

Namespace ns = Namespace.getNamespace("http://foo.com");
Element y = new Element("y", ns);
x.addContent(y);
Element z = new Element("z", ns);
y.addContent(z);

Kui sa jätsid välja, et Nimeruum astme alates ehitaja elemendi z, siis oleks järgmine puu-mälu:

<x>
  <y xmlns="http://foo.com">
    <z xmlns="" />
  </y>
</z>

Miks kõik uued read ilmuvad \n, isegi Windows?

Vastavalt punktile 2.11 XML-Soovitus, 2. trükk:

lihtsustada ülesannete rakendused, XML-protsessor peab normaliseeruma line katkestused sõeluda üksuste #xA kas tõlkides kahe-märgijada #xD #xA ja mis tahes #xD, et ei ole, millele järgneb #xA #xA kohta input enne parsing, või kasutades mõnda muud meetodit selline, et märkide vastu, et rakendus on sama, kui seda tehti tõlge.

teisisõnu, see on täpselt, mida peaks juhtuma.

Mõned XML-sisend võib põgeneda \r carriage return, kui &#xD; ja XML-parser on tõlkida seda, et tõeline \r märk teie JDOM Teksti. Kui see Tekst on väljund jälle see uuesti põgenenud, kuna &#xD;.

Miks ei setText(“&#160;”) mitte seda, mida ma tahan?

Kui te kaotate string arvesse meetod nagu setText() JDOM eeldab see on lihtsalt, et string, ei fragment XML-i. Näiteks, kui teil on kõne:

element.setText("&#160;")

JDOM eeldab soovite määrata sisu string, mis sisaldab kuus tähemärki & # 1 6 0 ;. See ei sõeluda see, et üritada mõista seda, kui XML-i esimene. Seega, kui te väljund teksti kasutades XMLOutputter siis loomulikult põgeneda erilist ampersand iseloomu ja väljund &amp;#160;. Lahendus on läbima korrapärase Unicode ‘ i märke, et setText() meetod või kui teil on teksti andmed, mida soovite, tuleb tõlgendada nii, XML, kandub see läbi XML-parser enne, kui see läheb JDOM. See on see, mida SAXBuilder ja DOMBuilder klassid teha.

Kui kasutad IDE siluri miks ma näen kummaline ArrayIndexOutOfBoundsException?

Mõned jäsentimiä (Xerces lisatud) kasutada nimetatud erandit, mis on osa nende standardne töökord, sisemiselt viskamine ja püüdmine arvatud. Nr kood väljaspool raamatukogu on vaid seda näha. Siiski IDE debuggers on sageli konfigureeritud aruande iga kord, kui see erand on visatud, ja nii nad paljastada arvatud. See võib eirata.

Kuidas lisada PI või Kommenteerida enne root element?

Peate juurdepääsu dokumendi sisu List. Kas saan loetelu ja lisada sisu oma peaga, või seada nimekirja, sisu selgelt.

doc.getContent().add(0, pi);
või
doc.setContent(listOfContent);

Kuidas vältida saada OutOfMemoryError?

Kõige JVMs on võimalus suurendada oma maksimaalse hunnik suurus, mis on maksimaalne mälu TÖÖTAB saavad kasutada oma objektid. Te saate seada oma esialgse hunnik suurus 32 Megs ja maksimaalne hunnik suurus 64 Megs järgmine käsk:

java -Xms32m -Xmx64m SomeClass

Kui te ei nõua, et kõik dokumendi mälu, pilk jdom-contrib mooduli org.jdom.contrib.sisend.skanner pakett, mis võimaldab teil ehitada selle osa kohta dokumendi, sobitamine on XPath avaldis.

Miks minu faili kodeeringu kohta väljund ei sobi kodeeringu kohta sisend?

vaikimisi kodeering kasutatud XMLOutputter on UTF-8, muutuva pikkusega kodeering, mis võivad esindada kõik Unicode ‘ i märke. Seda saab muuta helista format.setEncoding() Format objekt vastu, et XMLOutputter. Oleks tore, kui XMLOutputter võiks vaikimisi originaal-kodeeringu faili, kuid kahjuks jäsentimiä ei tähenda, originaal, kodeerimine. Teil on sätestatud see programatically.

See probleem kõige sagedamini mõjutab inimesi dokumentidega ühise ISO-8859-1 (Latin-1) kodeeringut, kes kasutavad sümboleid, näiteks , kuid ei ole tuttav võttes mõelda kodeeringud. Tip meeles pidada, on see, et need dokumendid tuleb määrata output encoding ISO-8859-1, vastasel juhul on märkide valik 128-255 on väljund, kasutades kahekordset bait kodeeringus UTF-8 asemel tavaline ühe baidi kodeering ISO-8859-1.

Miks ei kulgeb dokument, läbi pistikupesa mõnikord riputada parser?

probleem on selles, et mitu XML jäsentimiä lähedal sisend-stream, kui nad lugeda EOF (-1). On see tõsi Xerces, mis on JDOM vaikimisi parser. See on ka tõsi, Karmiinpunane. Kahjuks sulgemine SocketInputStream sulgeb alusvara SocketImpl, millega faili tunnus, et null. Pesa väljund vool on kasutu pärast seda, nii et teie taotlus ei ole võimalik saada vastust. Et lahendus, kaitsta oma pesa on sisend-stream koos InputStream wrapper, et ei sulge aluseks olev oja (alistada close() meetod), või lugeda kõike nö. enne ise maha JDOM ehitaja:

bait[] buf = new byte[pikkus];
new DataInputStream(inputStream).readFully(buf);
InputStream in = new ByteArrayInputStream(buf);
(contributed Joseph Bowbeer)

Kuidas hoida DTD laadimist? Isegi, kui ma välja lülitada kinnitamine parser üritab laadida DTD faili.

Isegi siis, kui valideerimine on välja lülitatud, XML-parser on vaikimisi koormus välise DTD faili, et sõeluda DTD välise üksuse deklaratsioonid. Xerces on funktsioon välja lülitada selline käitumine nimega “http://apache.org/xml/features/nonvalidating/load-external-dtd” ja kui sa tead, sa oled kasutades Xerces saate lülitage see funktsioon sisse, ehitaja.

builder.setFeature(
  "http://apache.org/xml/features/nonvalidating/load-external-dtd", false);

Kui kasutate mõnda muud parser nagu Crimson, teie parim panus on luua EntityResolver, et lahendab DTD ilma tegelikult lugemise eraldi faili.

import org.xml.sax.*;
import java.io.*;
public class NoOpEntityResolver implements EntityResolver {
  public InputSource resolveEntity(String publicId, String systemId) {
    return new InputSource(new StringBufferInputStream(""));
  }
}

Siis ehitaja…

builder.setEntityResolver(new NoOpEntityResolver());

on negatiivne külg, et see lähenemisviis. Kõik üksused dokument lahendatakse tühi string, ja tõhusalt kaovad. Kui teie dokument on üksused, mida vaja, et setExpandEntities(false) koodi ja tagada EntityResolver ainult pärsib DocType.

Kuidas ma kinnitada vastu skeemi kasutamisel JDOM 2.x?

JDOM 2.x kehtestatakse lihtsustatud mudel Dokumendi kinnitamist. org.jdom2.input.sax.XMLReaders Enum sisaldab liikmed, et luua oma kinnitamine teile.

täielik kood JDOM 2.x näeb välja selline:

SAXBuilder builder =
new SAXBuilder(XMLReaders.XSDVALIDATING);
Document doc = builder.build(xml);

Kuidas ma kinnitada vastu skeemi kasutamisel JDOM 1.x?

JDOM 1.x ei ole ta enda parser, ta kasutab standard jäsentimiä nagu Xerces teha raske tõstmiseks. Kui sa tahad skeemi kinnitamist veenduge, et valite parser, mis toetab skeeme. Xerces 2 on hea valik (saad seda http://xml.apache.org). Teil on vaja ka kasutada koodi JDOM Beta 8 või hiljem.

määrata parser JDOM kasutab, võite konfigureerida JAXP asjakohaselt (alates JDOM kasutab JAXP kui see on saadaval, vaadake lõpuni see kirje andmed) või saate selgesõnaliselt pass nimi parser, et SAXBuilder ehitaja. Eest Xerces 2 parser klass on org.apache.xerces.parsers.SAXParser. Teil peab olema ka luba parser kinnitamine sooritades “tõene”, kui luua SAXBuilder.

SAXBuilder builder =
new SAXBuilder(“org.apache.xerces.parsers.SAXParser”, true);

Järgmine, sa ütle parser (Xerces), mida soovite kinnitada vastu skeemi (või skeem), ja te kaotate parser teavet nende skeemi. Eri jäsentimiä seda teha erineval moel. Selles Xerces sa seda teha, seades special “funktsioonid” ja “properties” parser. JDOM paljastab nende parser seadeid setFeature() ja setProperty() meetodeid, SAXBuilder. Need läbipääs meetodid olid lisatakse pärast Beeta-7, mis on miks teil on vaja Beta 8 või üle selle.

Schemas on lubatud, seades funktsiooni “http://apache.org/xml/features/validation/schema” tõsi.
builder.setFeature(
 "http://apache.org/xml/features/validation/schema", true);

Schema asukohad on antud säte vara “http://apache.org/xml/properties/schema/external-schemaLocation” nimekiri-tühimärkide eraldatud nimi-väärtus paare. “Nimi” – nimeruumis schema on seotud, “väärtus” on asukoha skeemi, et nimeruumi. Näiteks:

builder.setProperty(
 "http://apache.org/xml/properties/schema/external-schemaLocation",   "http://www.w3.org/2001/12/soap-envelope soap-envelope.xsd" + " " +   "http://kevinj.develop.com/weblog/weblog.xsd weblog.xsd");

eespool toodud näide näitab, kuidas valideerida vastu mitu schemas — vastu SEEP 1.2 skeemi, kus nimeruum on http://www.w3.org/2001/12/soap-envelope ja ja vastu skeemi jaoks nimeruum http://kevinj.develop.com/weblog/weblog.xsd. Failid, mis kirjeldavad neid skeeme on soap-envelope.xsd ja blogi.xsd vastavalt. Võite lisada nii palju nende nimi-väärtus paare, kui vaja. Väärtused ise on Url-idega. Nimi-väärtus paare järgida määratletud Skeemi, soovitus (http://www.w3.org/TR/xmlschema-1/#schema-loc ).

täielik-kood näeb välja selline:

SAXBuilder builder =
new SAXBuilder(“org.apache.xerces.parsers.SAXParser”, true);
builder.setFeature(
“http://apache.org/xml/features/validation/schema”, true);
builder.setProperty(
“http://apache.org/xml/properties/schema/external-schemaLocation”,
“http://www.w3.org/2001/12/soap-envelope soap-envelope.xsd” + ” ” +
“http://kevinj.develop.com/weblog/weblog.xsd weblog.xsd”);
Document doc = builder.build(xml);

Kui soovite kasutada JAXP, et valida parser, saate vahele jätta, täpsustades klassist SAXBuilder ehitaja ja selle asemel, et seada süsteemi vara “javax.xml-i.jäsentimiä.SAXParserFactory” väärtus “org.apache.xerces.jaxp.SAXParserFactoryImpl”. Mis ütleb JAXP kasutada Xerces’ tehase ehitada jäsentimiä. Kui soovite, saate määrata, selle vara käsurealt:

java -Djavax.xml.parsers.SAXParserFactory=
org.apache.xerces.jaxp.SAXParserFactoryImpl …

(kaasa Aidanud Kevin Jones)

Kuidas ma saan täita mälu kinnitamine vastu DTD või Skeemi?

Praegu ei saa teha seda, JDOM või muu Java-document object model (API). Siiski on see midagi, mida me tahaks JDOM toetada, ja meil on vabatahtlik, kes on selle kallal.

JDOM tagab dokumendi mällu on alati hästi moodustatud. Võib JDOM tagama ka dokumendi mällu on alati kehtiv?

Ei, see on meie praegune usk, et see on parem, et paljastada a checkValid() tüüpi kõne peale, et üritada pidevalt kinnitamist kontrollida. Üks põhjus on tulemuslikkuse. Teine põhjus on see, et teil on kana-muna probleem, kui näiteks element peab täpselt kahe lapse elemendid olema kehtiv, kuid pärast lisades kas lapsele saab dokumendi olla ajutiselt kehtetu riik. Tööd umbes see eeldaks midagi tehingu muudatused, ja, et on palju ballasti jaoks vähe kasu.

Miks ma saan IndexOutOfBoundsException või ConcurrentModificationException kohta silmuspõletamise?

Koodi nagu pärast ei viska IndexOutOfBoundsException:

List children = root.getChildren("foo");
 int size = children.size();
 for (int i = 0; i < size; i++) {
   Element child = (Element) children.get(i);
   child.detach();
   otherRoot.addContent(child);
 }

põhjus on, et suurus nimekiri on eelnevalt arvutatud, kuid suurust on vähendatud ühe mõlemal lahti() kõne, põhjustades aasa jaoks kõndida väljas nimekirja lõppu kirja. Õige loop on kasutada Iterator. Koos Iterator sul ei ole see probleem, ja see on kiiremad samuti.

Kuid, isegi Iterator, järgmine kood viskab ConcurrentModificationException:

List children = root.getChildren("foo");
 Iterator itr = children.iterator();
 while (itr.hasNext()) {
   Element child = (Element) itr.next();
   child.detach();
   otherRoot.addContent(child);
 }

põhjus on selles, et lahti() kõne muudetakse loetelu lapsed samal ajal iterator on liiklevad nimekirja, ja see on samaaegne muutmine. Lahendus on kasutada Iterator on eemaldada() meetodit, selle asemel, et lahti() selline olukord:

List children = root.getChildren("foo");
 Iterator itr = children.iterator();
 while (itr.hasNext()) {
   Element child = (Element) itr.next();
   itr.remove();
   otherRoot.addContent(child);
 }

On arhiivi jaoks JDOM meililistide?

Jah, kõik sõnumid on olemas oma Veebi-põhiste läbimõtlemist. Allpool on õlilaik otsingumootoriga kõik-ühes arhiiv:

on veel arhiivis aadressil:

Kuidas ma tühista meililist?

URL-i, et hallata oma listi liikmeks (sh tellimus) on lisatud allosas iga nimekirja sõnum. See peaks olema midagi sellist http://www.jdom.org/mailman/options/jdom-interest/ [email protected]. Veenduge, et asendada “youraddr” teie aadress, ja “yourhost” teie võõrustaja. Eest jdom-teatada asendada “intressi” sõnaga “teatavaks” URL.

Kuidas postitada meililist on mitu aadress?

rämpsposti kaitse, ainult liikmete meililist võib postitada. Selleks, et postitada mitu kontot, tellida iga konto ja valige “Disable posti kättetoimetamise” feature “on” kõik ekstra kontod. Saate määrata, et funktsioon URL-i anda eelmine vastus.

Peaks ma küsin üldine XML küsimused ja Jason, Brett, või Rolf?

Ei, need on piisavalt hõivatud juba. Kuid saab tellida Brett raamat Java ja XML-i või mõne muu XML-sissejuhatav raamatud XML Piibel poolt Elliotte Roostes Harold (üks meie tuntud jdom huvi listi liikmed).

raamatu Java ja XML-i räägib JDOM 1.0; miks segadust?

raamat hõlmab varajase beeta. Palju on muutunud (paremuse poole), kuna avaldamist raamat. Kõige täpsema JDOM API usalda Javadocs, mitte raamat. Brett oli veidi optimistlik, kui kirjalikult raamat. Tema 2nd Edition komplekti asju otse.

mul on küsimus, et ei ole vastanud siin. Mida teha?

Esiteks, sa peaks otsi JDOM postiloendi arhiivi. Näiteks, kui sa oled kasutades Oracle parser ja näha IllegalTargetException, mis lõhnab kahtlane, saate otsida “oracle IllegalTargetException” ja sa leiad, et arutelu küsimus. Otsingud on võimas ja kiire!

Kui te ei leia vastust arhiivi, saab postitada jdom huvi. Kui te arvate, et olete leidnud vea, veenduge, et te järgige järgmisi nõuandeid bug aruandluse!

Kuidas esitada bug report?

Kui arvate, et olete leidnud viga JDOM, palun järgige käesolevas korras:

  1. Kontrollige nii avatud küsimusi ja suletud küsimusi, et näha, kui see on teada probleem.
  2. Kontrollige, kas probleem ilmneb siis, kui kasutad uusima arengu versiooni (allikas .zip)JDOM.
  3. Otsi JDOM postiloendi arhiivi, nagu on selgitatud eespool.
  4. Kui te ei leia resolutsiooni, viimane pilt, kas koosta küsimus ka GitHub lehelt või postitada jdom huvi postiloendi; veenduge, et olete tellija esimene ainult tellijad saavad ametikohale.
  5. bug report, anda võimalikult palju teavet — stack trace, reprodutseeritavad ja lühike kood nt XML-fail, mis põhjustab probleeme. Veenduge, et riik versiooni JDOM kasutada (ametlik versioon või GitHub toime).
  6. Kui sul on patch vea, palun esitada, et koos probleemi aruanne. Me armastame laigud.

Kust ma saan lisateavet?

JDOM API dokumentatsioon, slaidid esmasest JDOM väljakuulutamine, ja muid kasulikke vahendeid saavad kõik alla siin.

Leave a Reply