splitten

dimes

Mitglied
Hallo,

ich habe ein array mit ungefähr folgenden Zeilen:

<channel serviceID="6dca" name="Das Erste" tsid="044d" onid="0001" sat="192" />
<channel serviceID="6d66" name="ZDF" tsid="0437" onid="0001" sat="192" />
<channel serviceID="2ee3" name="RTL Television" tsid="0441" onid="0001" sat="192" />
<channel serviceID="445c" name="SAT.1" tsid="0453" onid="0001" sat="192" />
<channel serviceID="445d" name="ProSieben" tsid="0453" onid="0001" sat="192" />
<channel serviceID="2ef4" name="RTL2" tsid="0441" onid="0001" sat="192" />
<channel serviceID="445e" name="kabel eins" tsid="0453" onid="0001" sat="192" />
<channel serviceID="2f1c" name="VOX" tsid="0441" onid="0001" sat="192" />
<channel serviceID="32c9" name="ORF1" tsid="045d" onid="0001" sat="192" />
<channel serviceID="32d4" name="ATV" tsid="045d" onid="0001" sat="192" />
<channel serviceID="0308" name="SIXX" tsid="0005" onid="0085" sat="192" />


nun wollte ich die Daten auslesen und in eine Datenbank schreiben...
Nun suche ich eine elegante Lösung um die Daten aus dem Sting zu lesen!
(z.B erste Zeile, den Wert 6dca in ein Stringfeld (servId), Das Erste in (name)... )

Was ich mir überlegt habe ist nach z.B. "serviceID=" zu suchen ( mit .indexOf() ) und dann bis zum nächsten \" Zeichenden Wert abgreifen!

Nun bin ich nicht so ganz fit in Java und weiß nicht ob es noch andere "bessere" Lösungsansätze gibt!
Vielleicht kann mir ja der eine oder der andere mal nen Tip geben...

Gruß
Demetrius
 

r.w.

Bekanntes Mitglied
Hallo,

ich habe ein array mit ungefähr folgenden Zeilen:

<channel serviceID="6dca" name="Das Erste" tsid="044d" onid="0001" sat="192" />
<channel serviceID="6d66" name="ZDF" tsid="0437" onid="0001" sat="192" />
<channel serviceID="2ee3" name="RTL Television" tsid="0441" onid="0001" sat="192" />
<channel serviceID="445c" name="SAT.1" tsid="0453" onid="0001" sat="192" />
<channel serviceID="445d" name="ProSieben" tsid="0453" onid="0001" sat="192" />
<channel serviceID="2ef4" name="RTL2" tsid="0441" onid="0001" sat="192" />
<channel serviceID="445e" name="kabel eins" tsid="0453" onid="0001" sat="192" />
<channel serviceID="2f1c" name="VOX" tsid="0441" onid="0001" sat="192" />
<channel serviceID="32c9" name="ORF1" tsid="045d" onid="0001" sat="192" />
<channel serviceID="32d4" name="ATV" tsid="045d" onid="0001" sat="192" />
<channel serviceID="0308" name="SIXX" tsid="0005" onid="0085" sat="192" />


nun wollte ich die Daten auslesen und in eine Datenbank schreiben...
Nun suche ich eine elegante Lösung um die Daten aus dem Sting zu lesen!
(z.B erste Zeile, den Wert 6dca in ein Stringfeld (servId), Das Erste in (name)... )

Was ich mir überlegt habe ist nach z.B. "serviceID=" zu suchen ( mit .indexOf() ) und dann bis zum nächsten \" Zeichenden Wert abgreifen!

Nun bin ich nicht so ganz fit in Java und weiß nicht ob es noch andere "bessere" Lösungsansätze gibt!
Vielleicht kann mir ja der eine oder der andere mal nen Tip geben...

Gruß
Demetrius

Wenn das eine einmalige Geschichte wäre, würde ich das bei diesem Format gar nicht
programmiertechnisch machen, sondern alles in einen Texteditor laden und mit einigem
"suchen/ersetzen" aus den Zeilen INSERT-Statements basteln. Diese könnte man dann
direkt in eine DB (wie z.B. mySQL) importieren.
 

Nicer

Bekanntes Mitglied
Wenn du das als CSV Strings in ne Textdatei speicherst kannst du es nacher Zeile für Zeile einlesen und mit nem StringTokenizer zerlegen. Musst dann aber beim Abspeichern halt ein Trennzeichen einbauen ( zB ";" ). Regex könnte vllt auch helfen.
 

r.w.

Bekanntes Mitglied
Wenn du das als CSV Strings in ne Textdatei speicherst kannst du es nacher Zeile für Zeile einlesen und mit nem StringTokenizer zerlegen. Musst dann aber beim Abspeichern halt ein Trennzeichen einbauen ( zB ";" ). Regex könnte vllt auch helfen.

Und wie soll er daraus eine CSV-Datei generieren? ;-)



Zu meinem letzten Posting: 6 Mal Suchen/Ersetzen übrigens :)
 
Zuletzt bearbeitet:

eRaaaa

Top Contributor
Wenn du das als CSV Strings in ne Textdatei speicherst kannst du es nacher Zeile für Zeile einlesen und mit nem StringTokenizer zerlegen. Musst dann aber beim Abspeichern halt ein Trennzeichen einbauen ( zB ";" ). Regex könnte vllt auch helfen.

Tolle Idee! Hatte man dich nicht schon ein mal darauf aufmerksam gemacht, dass StringTokenizer legacy code ist?
API hat gesagt.:
StringTokenizer is a legacy class that is retained for compatibility reasons although its use is discouraged in new code
Zu dem hier wohl völlig overkill oO

Also wenn die Struktur wirklich so simpel und immer gleich ist und externe Bibliotheken vermieden werden sollen (warum auch immer) könnte man da wohl auch einfach etwas mit Matcher+Regex+group() machen oder eben mit der Scanner-Klasse.
Aber sobald das auch nur ein wenig mehr wird, würde ich dann auch zu JDOM und co greifen!
 

dimes

Mitglied
puh... viele neue Sachen für mich. Muss mich da glaube ich bisschen mehr mit befassen als ich vor hatte bzw. gedacht habe...

Also der komplette Aufbau sieht wie folgt aus:

Code:
<?xml version="1.0" encoding="UTF-8" ?>
<zapit>
<!--
    Settings created by Bouquet Wizard 3.0.3
//-->
	<Bouquet type="0" bouquet_id="0000" name="favoriten 1" hidden="0" locked="0">
		<channel serviceID="6dca" name="Das Erste" tsid="044d" onid="0001" sat="192" />
		<channel serviceID="6d66" name="ZDF" tsid="0437" onid="0001" sat="192" />
		<channel serviceID="2ee3" name="RTL Television" tsid="0441" onid="0001" sat="192" />
		<channel serviceID="445c" name="SAT.1" tsid="0453" onid="0001" sat="192" />
		<channel serviceID="445d" name="ProSieben" tsid="0453" onid="0001" sat="192" />
		<channel serviceID="2ef4" name="RTL2" tsid="0441" onid="0001" sat="192" />
		<channel serviceID="445e" name="kabel eins" tsid="0453" onid="0001" sat="192" />
		<channel serviceID="2f1c" name="VOX" tsid="0441" onid="0001" sat="192" />
		<channel serviceID="32c9" name="ORF1" tsid="045d" onid="0001" sat="192" />
		<channel serviceID="32d4" name="ATV" tsid="045d" onid="0001" sat="192" />
		<channel serviceID="0308" name="SIXX" tsid="0005" onid="0085" sat="192" />
		<channel serviceID="7004" name="VIVA Germany" tsid="0436" onid="0001" sat="192" />
		<channel serviceID="332e" name="GoTV" tsid="045b" onid="0001" sat="192" />
		<channel serviceID="2774" name="DELUXE MUSIC" tsid="0444" onid="0001" sat="192" />
		<channel serviceID="2f08" name="Super RTL" tsid="0441" onid="0001" sat="192" />
		<channel serviceID="0701" name="DAS VIERTE" tsid="0005" onid="0085" sat="192" />
		<channel serviceID="0033" name="TELE 5" tsid="0021" onid="0085" sat="192" />
		<channel serviceID="2775" name="DMAX" tsid="0444" onid="0001" sat="192" />
		<channel serviceID="0384" name="SPORT1" tsid="0021" onid="0085" sat="192" />
		<channel serviceID="79e0" name="Eurosport" tsid="0443" onid="0001" sat="192" />
		<channel serviceID="6e42" name="NDR" tsid="0431" onid="0001" sat="192" />
		<channel serviceID="6d67" name="3sat" tsid="0437" onid="0001" sat="192" />
		<channel serviceID="6e93" name="WDR" tsid="04b1" onid="0001" sat="192" />
		<channel serviceID="6e44" name="MDR" tsid="0431" onid="0001" sat="192" />
		<channel serviceID="7034" name="arte" tsid="041b" onid="0001" sat="192" />
		<channel serviceID="6d6e" name="zdf_neo" tsid="0437" onid="0001" sat="192" />
	</Bouquet>
	<Bouquet type="0" bouquet_id="0000" name="favoriten 2" hidden="0" locked="0">
		<channel serviceID="7031" name="EinsExtra" tsid="041b" onid="0001" sat="192" />
		<channel serviceID="7032" name="Einsfestival" tsid="041b" onid="0001" sat="192" />
		<channel serviceID="7033" name="EinsPlus" tsid="041b" onid="0001" sat="192" />
		<channel serviceID="6d6b" name="ZDFinfokanal" tsid="0437" onid="0001" sat="192" />
		<channel serviceID="6d70" name="ZDFtheaterkanal" tsid="0437" onid="0001" sat="192" />
		<channel serviceID="6d68" name="KiKa" tsid="0437" onid="0001" sat="192" />
		<channel serviceID="7008" name="NICK/COMEDY" tsid="0436" onid="0001" sat="192" />
		<channel serviceID="02fc" name="ANIXE SD" tsid="0005" onid="0085" sat="192" />
		<channel serviceID="7035" name="Phoenix" tsid="041b" onid="0001" sat="192" />
		<channel serviceID="6e2e" name="rbb Berlin" tsid="0431" onid="0001" sat="192" />
		<channel serviceID="6e47" name="SWR Fernsehen RP" tsid="0431" onid="0001" sat="192" />
		<channel serviceID="6f46" name="SR Fernsehen" tsid="0445" onid="0001" sat="192" />
		<channel serviceID="6dce" name="Bayerisches FS Nord" tsid="044d" onid="0001" sat="192" />
		<channel serviceID="6f47" name="BR-alpha" tsid="0445" onid="0001" sat="192" />
		<channel serviceID="6dcc" name="hr-fernsehen" tsid="044d" onid="0001" sat="192" />
		<channel serviceID="6ee1" name="Radio Bremen TV" tsid="04b1" onid="0001" sat="192" />
		<channel serviceID="2777" name="Oberpfalz/N.-Bayern TV" tsid="0444" onid="0001" sat="192" />
		<channel serviceID="2778" name="Franken SAT" tsid="0444" onid="0001" sat="192" />
		<channel serviceID="2779" name="LokalSAT" tsid="0444" onid="0001" sat="192" />
		<channel serviceID="3146" name="rhein main tv" tsid="0459" onid="0001" sat="192" />
		<channel serviceID="277a" name="münchen.tv/RFO" tsid="0444" onid="0001" sat="192" />
		<channel serviceID="0300" name="Rhein-Neckar TV" tsid="0007" onid="0085" sat="192" />
		<channel serviceID="277c" name="TVM/WWTV" tsid="0444" onid="0001" sat="192" />
		<channel serviceID="002f" name="REGIO TV" tsid="0021" onid="0085" sat="192" />
		<channel serviceID="3336" name="ServusTV Deutschland" tsid="045b" onid="0001" sat="192" />
		<channel serviceID="0293" name="collection" tsid="0005" onid="0085" sat="192" />
		<channel serviceID="0f98" name="LUXE.TV SD" tsid="0454" onid="0001" sat="192" />
		<channel serviceID="2776" name="DAF-AnlegerTV" tsid="0444" onid="0001" sat="192" />
		<channel serviceID="0049" name="Dr.Dish TV" tsid="0005" onid="0085" sat="192" />
	</Bouquet>
	<Bouquet type="0" bouquet_id="0000" name="sport" hidden="0" locked="0">
		<channel serviceID="0384" name="SPORT1" tsid="0021" onid="0085" sat="192" />
		<channel serviceID="79e0" name="Eurosport" tsid="0443" onid="0001" sat="192" />
		<channel serviceID="332d" name="TW1" tsid="045b" onid="0001" sat="192" />
		<channel serviceID="7601" name="R. MADRID TV" tsid="0408" onid="0001" sat="192" />
	</Bouquet>
	<Bouquet type="0" bouquet_id="0000" name="musik" hidden="0" locked="0">
		<channel serviceID="7001" name="MTV Germany" tsid="0436" onid="0001" sat="192" />
		<channel serviceID="6fe1" name="MTV AUSTRIA" tsid="0443" onid="0001" sat="192" />
		<channel serviceID="7004" name="VIVA Germany" tsid="0436" onid="0001" sat="192" />
		<channel serviceID="2774" name="DELUXE MUSIC" tsid="0444" onid="0001" sat="192" />
		<channel serviceID="02fd" name="YAVIDO" tsid="0007" onid="0085" sat="192" />
		<channel serviceID="0304" name="imusic TV" tsid="0005" onid="0085" sat="192" />
		<channel serviceID="332e" name="GoTV" tsid="045b" onid="0001" sat="192" />
		<channel serviceID="6fff" name="MTV Music" tsid="0436" onid="0001" sat="192" />
		<channel serviceID="6ff3" name="MTV ROCKS" tsid="042a" onid="0001" sat="192" />
		<channel serviceID="6fee" name="MTV Hits" tsid="042a" onid="0001" sat="192" />
		<channel serviceID="6fef" name="MTV Dance" tsid="042a" onid="0001" sat="192" />
		<channel serviceID="6ff0" name="VH1" tsid="042a" onid="0001" sat="192" />
		<channel serviceID="6ff1" name="VH1 Classic" tsid="042a" onid="0001" sat="192" />
		<channel serviceID="7009" name="MTV ENTERTAINMENT (S)" tsid="0436" onid="0001" sat="192" />
		<channel serviceID="6ffb" name="VH1 Classic." tsid="042a" onid="0001" sat="192" />
		<channel serviceID="6ffa" name="VH1." tsid="042a" onid="0001" sat="192" />
		<channel serviceID="7003" name="MTV IDOL" tsid="0436" onid="0001" sat="192" />
		<channel serviceID="7002" name="MTV PULSE" tsid="0436" onid="0001" sat="192" />
		<channel serviceID="6ff8" name="MTV Hits." tsid="042a" onid="0001" sat="192" />
		<channel serviceID="6ff5" name="MTV BASE FRANCE" tsid="042a" onid="0001" sat="192" />
		<channel serviceID="6fec" name="MTV FRANCE" tsid="042a" onid="0001" sat="192" />
		<channel serviceID="6ffd" name="MTV ROCKS." tsid="042a" onid="0001" sat="192" />
		<channel serviceID="7007" name="MTV NL" tsid="0436" onid="0001" sat="192" />
		<channel serviceID="6fb8" name="MTVNHD" tsid="042c" onid="0001" sat="192" />
		<channel serviceID="6fb9" name="MTVNHD" tsid="042c" onid="0001" sat="192" />
		<channel serviceID="20a0" name="MCM" tsid="0432" onid="0001" sat="192" />
		<channel serviceID="20ad" name="MCM TOP" tsid="0432" onid="0001" sat="192" />
		<channel serviceID="20a2" name="MCM POP" tsid="0432" onid="0001" sat="192" />
		<channel serviceID="1397" name="TMF" tsid="0455" onid="0035" sat="192" />
		<channel serviceID="76c5" name="40 TV" tsid="040e" onid="0001" sat="192" />
		<channel serviceID="7478" name="40 LATINO" tsid="03f0" onid="0001" sat="192" />
		<channel serviceID="1f47" name="MEZZO" tsid="042e" onid="0001" sat="192" />
		<channel serviceID="2206" name="TRACE TV" tsid="044c" onid="0001" sat="192" />
		<channel serviceID="1906" name="NRJ HITS" tsid="03fa" onid="0001" sat="192" />
		<channel serviceID="24bf" name="M6 MUSIC HITS" tsid="043c" onid="0001" sat="192" />
		<channel serviceID="2584" name="M6 MUSIC BLACK" tsid="0458" onid="0001" sat="192" />
		<channel serviceID="2585" name="M6 MUSIC CLUB" tsid="0458" onid="0001" sat="192" />
		<channel serviceID="1f56" name="NRJ 12" tsid="042e" onid="0001" sat="192" />
		<channel serviceID="1f44" name="EURONEWS FRA" tsid="042e" onid="0001" sat="192" />
		<channel serviceID="1f4c" name="MEZZO." tsid="042e" onid="0001" sat="192" />
		<channel serviceID="7470" name="40 LATINO" tsid="03f0" onid="0001" sat="192" />
	</Bouquet>
	<Bouquet type="0" bouquet_id="0000" name="kids" hidden="0" locked="0">
		<channel serviceID="2f08" name="Super RTL" tsid="0441" onid="0001" sat="192" />
		<channel serviceID="6d68" name="KiKa" tsid="0437" onid="0001" sat="192" />
		<channel serviceID="7008" name="NICK/COMEDY" tsid="0436" onid="0001" sat="192" />
		<channel serviceID="6fe0" name="NICK AUSTRIA" tsid="0443" onid="0001" sat="192" />
		<channel serviceID="02fc" name="ANIXE SD" tsid="0005" onid="0085" sat="192" />
	</Bouquet>
	<Bouquet type="0" bouquet_id="0000" name="news" hidden="0" locked="0">
		<channel serviceID="7035" name="Phoenix" tsid="041b" onid="0001" sat="192" />
		<channel serviceID="445f" name="N24" tsid="0453" onid="0001" sat="192" />
		<channel serviceID="2f3a" name="n-tv" tsid="0441" onid="0001" sat="192" />
		<channel serviceID="79f4" name="EuroNews" tsid="0443" onid="0001" sat="192" />
		<channel serviceID="272e" name="CNBC Europe" tsid="0402" onid="0001" sat="192" />
		<channel serviceID="6f6a" name="CNN Int." tsid="042c" onid="0001" sat="192" />
		<channel serviceID="2742" name="BBC World" tsid="0402" onid="0001" sat="192" />
		<channel serviceID="1b61" name="Al Jazeera Channel" tsid="03fc" onid="0001" sat="192" />
		<channel serviceID="1b64" name="Al Jazeera English" tsid="03fc" onid="0001" sat="192" />
		<channel serviceID="2753" name="Bloomberg Europe TV" tsid="0402" onid="0001" sat="192" />
		<channel serviceID="1b01" name="CCTV F" tsid="03fe" onid="0001" sat="192" />
		<channel serviceID="1b66" name="NHK World TV" tsid="03fc" onid="0001" sat="192" />
		<channel serviceID="1c7a" name="Sky News Intl" tsid="0457" onid="0001" sat="192" />
		<channel serviceID="004a" name="Press TV" tsid="0005" onid="0085" sat="192" />
	</Bouquet>
</zapit>

Wie man hier nicht schwer erkennen kann, handelt es sich hier um eine Senderliste.
Nun habe ich jetzt zwei Datenbanktabellen wo ich in die eine die Senderlisten (Bouquet) und in die andere die Sender (channel) reinschreiben will!

Außerdem brauche ich keine Funktionen um eine Datei einzulesen da ich diese Information (im XML format) schon in einem Array zu Verführung habe.

Gruß
 

faetzminator

Gesperrter Benutzer
Außerdem brauche ich keine Funktionen um eine Datei einzulesen da ich diese Information (im XML format) schon in einem Array zu Verführung habe.

Natürlich, ein XML Reader liest schlussendlich intern auch nur Zeichen für Zeichen, aber warum der Aufwand? Mit JDOM kommst du wirklich schnell und mit wenig Code sehr weit. Aber du darfst natürlich unsere Tipps auch ignorieren und mit indexOf, substring, charAt, split, ... arbeiten ;) Wenn du das nicht tust, hast du nicht nur ein schickes Programm, sondern auch gleich was gelernt :)
 

r.w.

Bekanntes Mitglied
Ich hab gestern Abend in einer ruhigen Minute mal etwas zusammengetippt.
Alles nur static, erhebt nicht den Anspruch perfekt zu sein und ist nur
an den Aufbau dieser Senderlistendatei angepasst. Soll auch nur als grundsätz-
liches Verwendungsbeispiel zeigen, mit welchen Mitteln ich es wahrscheinlich
gelöst hätte.

Das Beispiel erwartet die Datei "senderlisten.xml" und erzeugt als Ausgabe
aus dieser INSERT-Statements. Diese könnte man z.B. in phpMyAdmin komplett
in das SQL-Eingabeformular einfügen und ausführen, wenn zuvor die
entsprechenden Tabellen angelegt wurden.

Als Relation hab ich in die Sendertabelle noch die Felder bouquet_id
und bouquet_name übernommen. bouquet_name nur, weil bouquet_id in dieser
Datei immer "0000" ist.


Java:
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.w3c.dom.Document;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;


public class Main {

    public static void main(String[] args) {
        final String fnXMLInput = "senderlisten.xml";
        
        try {
            DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
            DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
            Document doc = docBuilder.parse(fnXMLInput);
            Node nod = doc.getFirstChild();
            getSenderListen(nod);
        } catch (SAXException ex) {
            Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IOException ex) {
            Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
        } catch (ParserConfigurationException ex) {
            Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
        }

    }

    
    public static void getSenderListen(Node nParent) {
        String sBouquetId="";
        String sBouquetName="";
        StringBuilder sb = new StringBuilder("");

        if (nParent.getNodeType()==1) {
        
            NodeList nLBouquets = nParent.getChildNodes();
            for (int i=0; i< nLBouquets.getLength();i++) {
                Node nBouquet = nLBouquets.item(i);
            
                if (nBouquet.getNodeName().equals("Bouquet")) {
                 
                    // INSERT-Statement fuer Senderlisten erstellen (START)
                    NamedNodeMap nnm = nBouquet.getAttributes();
                    sb.append("INSERT INTO Senderlisten (");
                    for (int n=0; n<nnm.getLength(); n++) {
                        sb.append(nnm.item(n).getNodeName() );
                        // Bouquet_Name fuer Relation in Sender-Tabelle merken...
                        if (nnm.item(n).getNodeName().equals("name")) {
                            sBouquetName = nnm.item(n).getNodeValue();
                        }
                        // Bouquet_Id fuer Relation in Sender-Tabelle merken...
                        if (nnm.item(n).getNodeName().equals("bouquet_id")) {
                            sBouquetId = nnm.item(n).getNodeValue();
                        }
                        if (n<nnm.getLength()-1) {
                            sb.append(", ");
                        }
                    }
                    sb.append(") ");
                    sb.append(" VALUES (");
                    for (int n=0; n<nnm.getLength(); n++) {
                        sb.append( "\"");
                        sb.append( nnm.item(n).getNodeValue());
                        sb.append( "\"");
                        if (n<nnm.getLength()-1) {
                            sb.append(", ");
                        }
                    }
                    sb.append(");");
                    // INSERT-Statement erstellen (ENDE)

                    // Hier in die Datenbank einfuegen...
                    System.out.println(sb.toString());

                    sb = new StringBuilder("");

                    // Sender der Liste...
                    getSender(nBouquet, sBouquetId, sBouquetName);
                }
            }
        
        }
    }

    
    public static void getSender(Node nParent, String sBouquetId, String sBouquetName) {
        StringBuilder sb = new StringBuilder("");
        
        if (nParent.getNodeType()==1) {
            NodeList nLChannels = nParent.getChildNodes();
            for (int i=0; i< nLChannels.getLength();i++) {
                Node nChannel = nLChannels.item(i);
                if (nChannel.getNodeName().equals("channel")) {

                    // INSERT-Statement fuer Sender erstellen (START)
                    NamedNodeMap nnm = nChannel.getAttributes();
                    sb.append("   INSERT INTO Sender (bouquet_id, bouquet_name, ");
                    for (int n=0; n<nnm.getLength(); n++) {
                        sb.append( nnm.item(n).getNodeName() );
                        if (n<nnm.getLength()-1) {
                            sb.append(", ");
                        }
                    }
                    sb.append(") ");
                    sb.append(" VALUES (");
                    sb.append("\"");
                    sb.append(sBouquetId);
                    sb.append("\", ");
                    sb.append("\"");
                    sb.append(sBouquetName);
                    sb.append("\", ");
                    for (int n=0; n<nnm.getLength(); n++) {
                        sb.append("\"");
                        sb.append(nnm.item(n).getNodeValue());
                        sb.append("\"");
                        if (n<nnm.getLength()-1) {
                            sb.append(", ");
                        }
                    }
                    sb.append(");");
                    // INSERT-Statement erstellen (ENDE)

                    // Hier in die Datenbank einfuegen...
                    System.out.println(sb.toString());

                    sb = new StringBuilder("");
                }
            }
        }
    }

}

Für Verbesserungsvorschläge, oder Gegenargumente bin ich gerne offen.

Ich hoffe, dass es für Dich nicht ganz nutzlos ist. ;-)

VG ROlf
 

dimes

Mitglied
Wie kann ich denn meinen xml code, den ich in einem Array habe und nicht in einer Datei, in die Document variable rein bekommen?
 
G

Gast2

Gast
Ganzu einfach:

Java:
public Document stringToDom(String xmlSource) 
            throws SAXException, ParserConfigurationException, IOException {
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        DocumentBuilder builder = factory.newDocumentBuilder();
        return builder.parse(new InputSource(new StringReader(xmlSource)));
    }

@r.w.
Übrigens würde ich anstatt die INSERT Statements zusammen zu verketten lieber PreparedStatements verweden. Sobald du in einem Element passende Escape oder SQL Kommentar Zeichen hast wird da so eine richtig schöne SQLInjection draus ;)
 
Zuletzt bearbeitet von einem Moderator:

dimes

Mitglied
Ganzu einfach:

Java:
public Document stringToDom(String xmlSource) 
            throws SAXException, ParserConfigurationException, IOException {
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        DocumentBuilder builder = factory.newDocumentBuilder();
        return builder.parse(new InputSource(new StringReader(xmlSource)));
    }

hm bei der Fünften Zeile sagt er "Type mismatch: cannot convert from org.w3c.dom.Document to org.jdom.Document"...

Außerdem habe ich mein xml im String[] und nicht in einem String... muss ich das durch loopen?
 

r.w.

Bekanntes Mitglied
@r.w.
Übrigens würde ich anstatt die INSERT Statements zusammen zu verketten lieber PreparedStatements verweden. Sobald du in einem Element passende Escape oder SQL Kommentar Zeichen hast wird da so eine richtig schöne SQLInjection draus ;)


Die INSERT-Statements habe ich nur erstellt, um auf der Konsole zu demonstrieren,
dass die Ausgabe auch funktioniert. Das Ablegen in der Datenbank hab ich bewusst
nicht implementiert, um nicht vom Wesentlichen abzulenken.
Es ging hier ja schließlich nicht um eine Datenbank-Frage. ;-)
 

r.w.

Bekanntes Mitglied
Wie kann ich denn meinen xml code, den ich in einem Array habe und nicht in einer Datei, in die Document variable rein bekommen?

Hier mal eine geänderte main, die ein String[] in einem StringBuilder zusammenfügt
und von da aus in das Document schiebt. Der relevante Code befindet sich zwischen
"start" und "ende":

Java:
//...
    public static void main(String[] args) {
//        final String fnXMLInput = "senderlisten.xml";
        
String[] ar =  {        
"<?xml version=\"1.0\" encoding=\"UTF-8\" ?>",
"<zapit>",
"<!--",
"    Settings created by Bouquet Wizard 3.0.3",
"//-->",
"	<Bouquet type=\"0\" bouquet_id=\"0000\" name=\"favoriten 1\" hidden=\"0\" locked=\"0\">",
"		<channel serviceID=\"6dca\" name=\"Das Erste\" tsid=\"044d\" onid=\"0001\" sat=\"192\" />",
"		<channel serviceID=\"6d66\" name=\"ZDF\" tsid=\"0437\" onid=\"0001\" sat=\"192\" />",
"		<channel serviceID=\"2ee3\" name=\"RTL Television\" tsid=\"0441\" onid=\"0001\" sat=\"192\" />",
"	</Bouquet>",
"	<Bouquet type=\"0\" bouquet_id=\"0000\" name=\"favoriten 2\" hidden=\"0\" locked=\"0\">",
"		<channel serviceID=\"7031\" name=\"EinsExtra\" tsid=\"041b\" onid=\"0001\" sat=\"192\" />",
"		<channel serviceID=\"7032\" name=\"Einsfestival\" tsid=\"041b\" onid=\"0001\" sat=\"192\" />",
"	</Bouquet>",
"</zapit>"
        };
        
        try {
            DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
            DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
//            Document doc = docBuilder.parse(fnXMLInput);

//---/ start /----------------------------------------------------------------
            StringBuilder sb = new StringBuilder("");
            for (int i=0; i<ar.length; i++) {
                sb.append(ar[i]);
                sb.append(System.getProperty("line.separator"));
            }
            ByteArrayInputStream is = new ByteArrayInputStream(sb.toString().getBytes());
            Document doc = docBuilder.parse(is);
//---/ ende  /----------------------------------------------------------------
            
            Node nod = doc.getFirstChild();
            getSenderListen(nod);
        } catch (SAXException ex) {
            Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IOException ex) {
            Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
        } catch (ParserConfigurationException ex) {
            Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
        }

    }
//...

Könnte sein, dass es auch einfacher geht, aber so funktioniert es schon mal. ;-)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
F 2x 16bit Werte zu einem 32bit und dann splitten mit 0xb Java Basics - Anfänger-Themen 1
T String splitten Java Basics - Anfänger-Themen 3
S Nutzereingabe splitten und in string array wieder ausgeben. Java Basics - Anfänger-Themen 1
Henri Filename splitten Java Basics - Anfänger-Themen 8
S Nummer splitten Java Basics - Anfänger-Themen 2
CptK Datentypen String splitten, ä,ö,ü, etc ignorieren Java Basics - Anfänger-Themen 1
J String splitten Java Basics - Anfänger-Themen 3
A String mit mehreren Zeilen splitten Java Basics - Anfänger-Themen 4
C Erste Schritte Regex - Datei einlesen und splitten Java Basics - Anfänger-Themen 4
J String splitten und weiter einarbeiten in einer Methode? Java Basics - Anfänger-Themen 11
S Java Text splitten mit Tabs, Zeilen, Zeichen und Klammern. Java Basics - Anfänger-Themen 6
C Zeilen in Array einlesen und splitten? Java Basics - Anfänger-Themen 17
MiMa Splitten eines Strings Java Basics - Anfänger-Themen 5
DestinatioN Problem beim splitten eines Satzes in Wörter und die Wörter in Buchstaben Java Basics - Anfänger-Themen 2
S splitten von arrays Java Basics - Anfänger-Themen 6
S Zahl an bestimmter Stelle splitten Java Basics - Anfänger-Themen 6
S String splitten und berichtigen? Java Basics - Anfänger-Themen 16
Z String splitten Java Basics - Anfänger-Themen 2
S String ab dem Wechsel Buchstaben zu Zahlen splitten Java Basics - Anfänger-Themen 14
S String splitten und in ArrayList speichern Java Basics - Anfänger-Themen 4
A String Mehrfach Splitten Java Basics - Anfänger-Themen 1
A Binärstrom splitten und in ArrayList adden Java Basics - Anfänger-Themen 1
G Quellcode "splitten" Java Basics - Anfänger-Themen 6
Bluedaishi Textdateien splitten, neu schreiben Java Basics - Anfänger-Themen 13
X Regex splitten Java Basics - Anfänger-Themen 5
B Variablen Unbekante anzahl an Strings splitten und vergleichen Java Basics - Anfänger-Themen 31
B String in in bestimmten abschnitten splitten Java Basics - Anfänger-Themen 2
H String splitten Java Basics - Anfänger-Themen 6
S String Splitten Java Basics - Anfänger-Themen 2
P Erste Schritte Buffered Image splitten und darstellen Java Basics - Anfänger-Themen 2
I Rechenoperatoren mit Regex splitten Java Basics - Anfänger-Themen 12
T String splitten Java Basics - Anfänger-Themen 2
C Methoden String richtig splitten Java Basics - Anfänger-Themen 5
0 Strings nach TABULATOR splitten Java Basics - Anfänger-Themen 10
C Regex String splitten Java Basics - Anfänger-Themen 5
T String splitten beim wechsel vom buchstabe zu zahl! Java Basics - Anfänger-Themen 8
F Char Array splitten Java Basics - Anfänger-Themen 5
2 String splitten und nacheinander löschen Java Basics - Anfänger-Themen 11
J Datentypen String splitten ohne festen Ausdruck Java Basics - Anfänger-Themen 8
B Datei in mehrere Ordner splitten und wieder zusammenfuegen... Java Basics - Anfänger-Themen 3
T String in String Array splitten Java Basics - Anfänger-Themen 4
StrikeTom String mehrmals splitten Java Basics - Anfänger-Themen 11
X Splitten eines Strings Java Basics - Anfänger-Themen 3
A Problem beim Splitten eines Strings Java Basics - Anfänger-Themen 10
S String in Integer Array splitten Java Basics - Anfänger-Themen 2
O Werte eines arrays splitten Java Basics - Anfänger-Themen 4
A String nach bestimmten kriterien splitten Java Basics - Anfänger-Themen 13
X Webseite auslesen ohne Quellcode zu splitten Java Basics - Anfänger-Themen 3
S Double splitten Java Basics - Anfänger-Themen 4
M String splitten mit split() Java Basics - Anfänger-Themen 4
T String splitten Java Basics - Anfänger-Themen 2
K String splitten Java Basics - Anfänger-Themen 4
V Byte Arrays in Strings umwandeln und splitten Java Basics - Anfänger-Themen 2
S String splitten Java Basics - Anfänger-Themen 4
O String splitten Java Basics - Anfänger-Themen 9
N Textdatei einlesen, Filtern und Splitten Java Basics - Anfänger-Themen 4
A Datei einlesen und splitten nur zeilenweise Java Basics - Anfänger-Themen 7
M String splitten Java Basics - Anfänger-Themen 2
G String nach Pluszeichen splitten Java Basics - Anfänger-Themen 2
G long datum splitten in day etc Java Basics - Anfänger-Themen 23
G String splitten Java Basics - Anfänger-Themen 3
G Stringinhalt splitten und einzeln verwenden Java Basics - Anfänger-Themen 8
T String splitten und auf fehler abfragen Java Basics - Anfänger-Themen 3
H Problem beim Splitten eines Strings Java Basics - Anfänger-Themen 13
L Stringzeile aus Datei in 5 token splitten und 5D array laden Java Basics - Anfänger-Themen 3
U String splitten Java Basics - Anfänger-Themen 12
D txt nach Zeilen splitten. Java Basics - Anfänger-Themen 9
J Java Aufgabe -> String einlesen, splitten,Substring & Java Basics - Anfänger-Themen 3
loadbrain String splitten Java Basics - Anfänger-Themen 3
M Scanner soll nach einem Ausdruck splitten Java Basics - Anfänger-Themen 2
G eine Zeile in einer Textdatei splitten Java Basics - Anfänger-Themen 15
S txt-Datei nach Leerzeichen Splitten lassen! Java Basics - Anfänger-Themen 3
G Image 'splitten' Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben