XML - mal wieder.

Status
Nicht offen für weitere Antworten.

phipsnet

Mitglied
moin allerseits;
folgendes problem habe ich:
gegeben ist eine xml struktur dieser art:

Code:
<text>
   <page nummer="1"/>
   <variation>
             <variant idVar="München 34">Ditze bvch haeizet div chlage</variant>
             <variant idVar="Wien">Ditz puech haysset klagen</variant>
             <variant idVar="Donaueschingen 63">Aventiure von der Klage</variant>
             <variant idVar="Donaueschingen 64">Aventiure von der Klage</variant>
             <variant idVar="Berlin 855">Hie hebt sich die austragung vnd die clag</variant>
        </variation>
        der doten
        <line/>
        <mode idMode="Initiale">H</mode>ie
   <variation>
             <variant idVar="München 34">hevet</variant>
             <variant idVar="" ></variant>
         sich
             <variant idVar="München 31">an</variant>
             <variant idVar="Nürnberg">an </variant>
        <variant idVar="Krakau">an </variant>
        <variant idVar="Prag">an </variant>
        <variant idVar="Berlin 855">an </variant>
        <variant idVar="Wien">das</variant>
   </variation>
</text>

jetzt soll ich mit meinem parser einen string der folgenden art zusammenbasteln:
auf anfrage einer methode, die eine idVar mitschickt (zb. 'muenchen 34') soll ich folgendes zurueckgeben:

"Ditze bvch haeizet div chlage
hevet sich"

ich muss also den content in <text> aufbroeseln und ggfls. noch strings dazwischenpacken. mir haengt sich dabei gerade der kopf aus. zurureckgeben soll ich einen string. hat jemand eine idee, wie ich das machen koennte ? falls garnichts mehr hilft, koennte man auch noch die xml struktur dahingehend aendern, dass man dem content in <text> eigene tags mitgibt, aber das sollte die letzte option sein (...selbst dann wuesste ich nicht, wie es gehen koennte...argh!)

weiterbringende tips und ratschlaege sind sehr willkommen! :)

1000dank im vorraus
 
S

stev.glasow

Gast
Wo liegt denn konkret das Probelm, den content sollte eigentlich jeder gängige xml Parser auslesen können.
 

phipsnet

Mitglied
wenn du dir den string ansiehst, den ich zurueckgeben muss, ist das ein mix aus dem content von <text>
und dem text des jeweiligen <variant> tags; in dem fall 'münchen 34';

also folgendermaßen:
[content <text>] + [content <variant>] + [content <text>] + [content <variant>]

...und da weiss ich eben nicht, wie ich den content von <text> aufbroeseln kann...
 
S

stev.glasow

Gast
Mit welchem Parser arbeitest du? Mit JDOM und Co geht das doch recht gut. Normaler weise holst du dir einfach die Inhalte als String und addierst diese. Oder verstehe ich dich miss? Willst du nen eigenen Parser schreiben?
 

phipsnet

Mitglied
ja, mit jdom. wenn ich mir mit text.getText() den content geben lasse, bekomme ich
"der doten sich" zurueck.

nun soll aber mein ergebnisstring
"Ditze bvch haeizet div chlage der doten hevet sich"
heissen. das bedeutet, ich muss den conten von <text> splitten, weill ich
zwischen zwei strings etwas einfuegen muss...
 
S

stev.glasow

Gast
Tut mir Leid ich verstehe nicht wo das Problem liegt :?
Vielleicht weiß ja jemand anderes was.
Oder wir versuchen noch einen dritten Erklärungsversuch.

Du gehst die Varianaten durch vergleichstet deren idVars auf "München 34" und addierst bei übereinstimmung die Inhalte.
 

phipsnet

Mitglied
ok, also nochmal:

wenn du dir den ergebnisstring ansiehst, stellst du fest, dass dieser nicht nur aus content von <variant> besteht, sondern ein mix aus content von <text> und <variant> ist. jetzt klar ?

und das problem besteht darin, den string korrekt zusammenzusetzen. schau dir das xml mal genau an und vor allem den ergebnisstring, dann sollte das problem klar werden...
 

clemson

Bekanntes Mitglied
also, wenn ich dich richtig verstanden habe, dann willst du die inhalte aller variant-elemente, welche die varId="München 34" haben, richtig?

kleine frage:

warum willst du, dass dabei dann auch der string "sich" zurückgegeben wird?? "sich" ist (laut deinem beispiel) gar kein text von einem variation elemenet mit der varId="München 34"
 
S

stev.glasow

Gast
Schau dir das mal an:


Code:
	private static final SAXBuilder sb = new SAXBuilder();
	
	public static String blub(String key, InputStream in) throws JDOMException, IOException{
		StringBuffer buf = new StringBuffer();
		Document doc = sb.build(in); 
		Element root = doc.getRootElement();
		
		Iterator i = root.getContent().iterator();
		while(i.hasNext()){
			
			Object e = i.next();
			if(e instanceof Element){
				Element vs = (Element)e;
				if(!vs.getName().equals("variation")) continue;
				
				Iterator ii = vs.getContent().iterator();
				while(ii.hasNext()){
					e = ii.next();
					if(e instanceof Element){
						Element v = (Element)e;
						if(!v.getName().equals("variant")) continue;
					
						Attribute idVar = v.getAttribute("idVar"); 
						if(idVar != null && idVar.getValue().equals(key)){
							buf.append(' ');
							buf.append(v.getText());
						}
					
					}
					else if(e instanceof Text){						
						String txt = ((Text)e).getTextTrim();
						if(txt.length() > 0){
							buf.append(' ');
							buf.append(txt);
						}
					}
				}
			}
			else if(e instanceof Text){				
				String txt = ((Text)e).getTextTrim();
				if(txt.length() > 0){
					buf.append(' ');
					buf.append(txt);
				}
			}
		}
		return buf.toString().trim();
		
	}
	
	public static void main(String[] args) throws IOException, JDOMException{
		
		System.out.println(blub("München 34", new FileInputStream("text.xml")));
	}
Ausgabe: Ditze bvch haeizet div chlage der doten ie hevet sich
 

phipsnet

Mitglied
du bist nicht zufaellig mit dem projekt betraut ?
anyways...vielen lieben dank; ich werde den ansatz gleich mal testen..

so long.
.p
 

phipsnet

Mitglied
hallo,

nochmal danke fuer die noble hilfestellung.
allerdings war das obige xml in meiner tast nur ein auszug.
was wuerde sich in deinem methodenvorschlag aendern, wenn
nicht <text> das root element, sondern, sagen wir <start> root waere und <text> ein direktes kind von
<start> ist ?


vielleicht kannst du kurz antworten ?
danke & gruß,
.p
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben