tutorials.de Buch-Aktion 02/2012
Like Tree1Danke
  • 1 Beitrag von shutdown
ERLEDIGT
JA
ANTWORTEN
6
ZUGRIFFE
3108
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    theone101 theone101 ist offline Mitglied Bronze
    Registriert seit
    Feb 2008
    Beiträge
    32
    Hallo erst mal,
    ich bin neu hier und habe ein kleines Problem hoffe ihr könnt mir weiterhelfen.
    Vorab ich kann Java net so gut also ich bin für jede Kritik offen.

    Meine Problemstellung ist:

    Ich habe mehrere XML files in vielen verschiedenen Unterverzeichnissen. Die XML files mit dem kommpletten Pfad sind in einer .txt datei Zeilenweise abgespeichert. Sprich:

    C:\Ordner\Ordner\Datei1.xml
    C:\Ordner\Ordner\Unterordner\Datei2.xml
    usw.

    Nun soll aus jeder XML bestimmte Informationen ausgelesen werden, nur Bestimmte. z.B.:
    <Datum>
    <Sprache>

    Da in einigen files nicht alle infos stecken soll null ausgegeben werden wenn nix gefunden wird.
    Ich möchte jetzt das immer eine XML aufgemacht wird nach den kriterien duchsucht wird und dann in ein textfile geschrieben wird und dann das nächste xml bearbeitet wird bis die liste der Pfade mit den XML dateien abgearbeitet wurde.

    Ich habe was versucht um den XML code zu lesen das klapt eigentlich auch schon gut nur kann ich das nur aus einer Datei. Ich möchte aber nicht alle Pfade eingeben sondern die aus der .txt file auslesen lassen.

    Also sprich eine schleife da habe ich was versucht aber er gibt mir in mein neues .txt nur 1 Zeile aus und nicht 3 obwohl in der Pfad.txt 3 Pfade drinnen stehen nimmt er mir nur den ersten.

    Hoffe jemand kann mir einen rat geben, vielleicht geht des ja auch besser wie gesagt war bis jetzt nur so ein versuch.

    Danke schon mal im vorraus.

    Gruß Thomas

    Hier mein Code
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    
    import java.io.*;
     
    public class XMLlesen {
     
        public static String alles(String tag, String xmlDateName) throws java.io.IOException {
            
            String ausgabe = null;
            String Text = null;
            String Next = null;
            int laenge1 = 0;
            int laenge2 = 0;
            
            
            BufferedReader b2 = new BufferedReader(new FileReader ("C:\\streams.txt"));
            while ((xmlDateName = b2.readLine()) != null)
            {
                BufferedReader b1 = new BufferedReader(new FileReader (xmlDateName));
            
            
            //XML einlesen und alle Space und tabs wegmachen 
            while ((Text = b1.readLine()) != null) {
                
                Next = Text.trim();
                laenge1 = Next.length()-1;
                laenge2 = tag.length();
                int ende = laenge1 - laenge2; 
     
                if (Text.contains(tag)) {
                    ausgabe = Next.substring(laenge2, ende); 
                }
                
                
            }
            
        }
            
            return ausgabe;
        }
     
        private static final String LINE_SEPARATOR = System.getProperty("line.separator");
     
        
        public static void main(String args[]) throws java.io.IOException {
     
            
            PrintWriter p = new PrintWriter(new FileWriter("C:\\ausgabe.txt"));
            
            BufferedReader b = new BufferedReader(new FileReader ("C:\\streams.txt"));
            String xmlDateiName;
            while ((xmlDateiName = b.readLine()) != null)
            {
            p.print(alles("<Pid>",xmlDateiName) + ", ");
            p.print(alles("<Iso639LanguageCode>",xmlDateiName) + ", ");
            p.print(alles(">252<",xmlDateiName) + ", ");
            p.print(Zeilelesen.ZeileW(">252<",xmlDateiName) + ", ");
            p.print(alles("<name>",xmlDateiName)+ ", ");
            p.print(alles("<UtcTime>",xmlDateiName)+ LINE_SEPARATOR);
     
            p.println();
            p.flush();
            p.close();
            
            }
        }
    }
     

  2. #2
    The_Fratellis The_Fratellis ist offline Mitglied
    Registriert seit
    Feb 2008
    Beiträge
    17
    ich hab mal ein Programm geschreiben die XML Dateien ausliest und dann in Config Datei umwandelt..

    so ich gib dir mal meine Hauptklasse und die ConfigKlasse.. die anderen Nebenklassen müssten normal nicht von belang sein.

    Hauptsächliches steht das meiste im unteren Teil



    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    
     
     
     
    import java.io.*;
    import java.util.*;
     
    import javax.xml.parsers.*;
     
    import org.w3c.dom.*;
    import org.xml.sax.*;
     
     
     
    public class ConfigWriter {
     
        private String targetLoad;
        private String targetSave;
        private String targetXML;
     
        private HashMap<String, ConfigType> hashXML = new HashMap<String, ConfigType>();
     
        public ConfigWriter(String targetLoad, String targetSave, String targetXML)
                throws Exception {
            this.targetLoad = targetLoad;
            this.targetSave = targetSave;
            this.targetXML = targetXML;
            configReader();
        }
     
        public void configReader() throws Exception {
     
            String row;
            String[] part;
     
            File loadFile = new File(targetLoad);
            File saveFile = new File(targetSave);
     
            FileInputStream fileInputStream = new FileInputStream(targetXML);
            Config config = new Config(saveFile, false, true);
     
            Document document = loadDocument(fileInputStream);
            parseDocument(document);
     
            ConfigType lastConfigType = null;
            ConfigType configType = null;
            try {
                BufferedReader reader = new BufferedReader(new FileReader(loadFile));
                row = reader.readLine();
                while (row != null) {
                    part = row.split(";");
                    if (hashXML.containsKey(part[0])) {
                        lastConfigType = configType;
                        configType = hashXML.get(part[0]);
                        List<ConfigElement> list = configType.getList();
                        if (list.size() == part.length - 1) { // anschauen
                            String section;
                            configType.increaseZaehler();
                            if (configType.getAnzahlZaehler() == 1) {
                                section = configType.getSection(configType
                                        .getZaehler());
                            } else {
                                
                                section = configType.getSection(lastConfigType.getZaehler(), configType.getZaehler());
                            }
                            
                            
                            Iterator<ConfigElement> iter = list.iterator();
                            for (int i = 1; iter.hasNext(); i++) {
                                ConfigElement configElement = iter.next();
                                if (configElement.isCreate()) {
                                    String key = configElement.getName();
                                    String value = part[i];
                                    if (part[i].equals("")) {
                                        value = configElement.getDefaultValue();
                                    }
                                    config.set(section, key, value);
                                }
                            }
                        } else {
                            // TODO throw Exception
                            System.out.println("bla" + (part.length - 1) + " - "
                                    + list.size());
                        }
                    }
                    row = reader.readLine();
                }
                reader.close();
                config.writeConfigData();
            } catch (FileNotFoundException ex) {
                ex.printStackTrace();
            }
        }
     
        private Document loadDocument(InputStream menubarConfiguration)
                throws Exception {
            DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
            factory.setValidating(false);
            DocumentBuilder builder = factory.newDocumentBuilder();
     
            builder.setErrorHandler(new ErrorHandler() {
                public void warning(SAXParseException ex) throws SAXException {
                    throw ex;
                }
     
                public void error(SAXParseException ex) throws SAXException {
                    throw ex;
                }
     
                public void fatalError(SAXParseException ex) throws SAXException {
                    throw ex;
                }
            });
            return builder.parse(menubarConfiguration);
        }
     
        private void parseDocument(Document document) {
            Element parent = document.getDocumentElement();
            NodeList child = parent.getChildNodes();
     
            for (int i = 0; i < child.getLength(); i++) {
                Node type = child.item(i);
                String nodeName = type.getNodeName();
                if (nodeName.equals("#text") || nodeName.equals("#comment")) {
                    continue;
                }
                Element typeElement = (Element) type;
     
                NodeList elementList = type.getChildNodes();
     
                List<ConfigElement> configElementList = new ArrayList<ConfigElement>();
     
                for (int j = 0; j < elementList.getLength(); j++) {
                    Node element = elementList.item(j);
                    String elementName = element.getNodeName();
                    if (elementName.equals("#text")
                            || elementName.equals("#comment")) {
                        continue;
                    }
                    Element elementElement = (Element) element;
                    String attr_Name = elementElement.getAttribute("name");
                    String attr_Typ = elementElement.getAttribute("typ");
                    String attr_Default = elementElement.getAttribute("default");
                    Boolean attr_Create = elementElement.getAttribute("erzeuge")
                            .equals("J");
     
                    ConfigElement configElement = new ConfigElement(attr_Name,
                            attr_Typ, attr_Default, attr_Create);
     
                    configElementList.add(configElement);
     
                }
     
                String nameTypElement = typeElement.getAttribute("name");
                String formatTypeElement = typeElement.getAttribute("format");
                ConfigType configType = new ConfigType(nameTypElement,
                        formatTypeElement, configElementList);
                hashXML.put(nameTypElement, configType);
     
            }
        }
    }
     
     
     
     
        public class ConfigElement {
        private String name;
        private String type;
        private String defaultValue;
        private boolean create;
     
        public ConfigElement(String name, String type, String defaultValue,
                boolean create) {
            super();
            this.name = name;
            this.type = type;
            this.defaultValue = defaultValue;
            this.create = create;
        }
     
        public boolean isCreate() {
            return create;
        }
     
        public String getDefaultValue() {
            return defaultValue;
        }
     
        public String getName() {
            return name;
        }
     
        public String getType() {
            return type;
        }
     
    }
    Geändert von The_Fratellis (26.02.08 um 13:17 Uhr)
     

  3. #3
    Avatar von shutdown
    shutdown shutdown ist offline Mitglied Smaragd
    Registriert seit
    Jun 2004
    Beiträge
    1.026
    1. Liest du bereits außerhalb von alles() den DAteinamen aus - und dann in alles gleich nochmal, das ist einmal überflüssig.

    BufferedReader b = new BufferedReader(new FileReader ("C:\\streams.txt"));
    String xmlDateiName;
    while ((xmlDateiName = b.readLine()) != null)
    {
    p.print(alles("<Pid>",xmlDateiName) + ", ");

    2. Eine Funktion hat nur einen Rückgabewert. Du gehts in alles zwar alle Text-Dateien durch, am Ende steht aber nur der Wert in ausgabe. Und das ist der Wert der letzten Datei, die durchsucht wurde.
     
    Versuche nie Probleme zu lösen, von deren Existenz du noch gar nichts weißt!

  4. #4
    MeinerEiner_80 Tutorials.de Gastzugang
    Moin!
    Du solltest vielleicht zusätzliche APIs wie JDOM http://www.jdom.org/ nutzen
    Die würden dir das Leben bezüglich Lesen einer XML Datei erheblich vereinfachen..

    *grüssle*
    MeinerEiner
     

  5. #5
    theone101 theone101 ist offline Mitglied Bronze
    Registriert seit
    Feb 2008
    Beiträge
    32
    Hallo Danke für die schnellen Antworten.

    @shutdown: Danke des wars. Aber in meiner neuen ausgabe.txt steht immer noch nur ein Eintrag.

    Sprich wenn ich es in der Controlbox ausgebe gehts, aber sobald ich es in eine TXT datei (hier ausgabe.txt) reinschreiben will gibt er mir nur die letzte zeile raus. Ich meine das er ja in die schleife geht und immer wieder die Datei überschreibt aber wie verhindere ich das so das erimmer wenn er eine XML gelesen hat in die nächste Zeile der TXT reinschreibt.

    Ich weiß Ich hätte des Lieber mit dem DOM oder SAX Parser machen sollen aber mir gings hier mehr um das routinierte einlesen von vielen Files da ich damit nicht nur XML Files einlesen will. Somit kann ich auch andere Files nach den Kriterien duchsuchen.

    Aber Danke an alle.

    Gruß
    Thomas
    Geändert von theone101 (26.02.08 um 14:43 Uhr)
     

  6. #6
    Avatar von shutdown
    shutdown shutdown ist offline Mitglied Smaragd
    Registriert seit
    Jun 2004
    Beiträge
    1.026
    Gib mal im Konstruktor des Printwriters als zusätzlichen Parameter true mit an - append oder nicht append, das ist hier die Frage und wird durch diesen Parameter geklärt.
    theone101 bedankt sich. 
    Versuche nie Probleme zu lösen, von deren Existenz du noch gar nichts weißt!

  7. #7
    theone101 theone101 ist offline Mitglied Bronze
    Registriert seit
    Feb 2008
    Beiträge
    32
    Hallo,
    hab des jetzt mal ausprobiert. Es Funktioniert.
    Ja des wars. DANKE shutdown.

    Gruß
    Thomas
    Geändert von theone101 (27.02.08 um 07:56 Uhr)
     

Ähnliche Themen

  1. Text Datei einlesen und ausgeben
    Von sakizzo im Forum Java
    Antworten: 7
    Letzter Beitrag: 10.03.10, 20:19
  2. Antworten: 0
    Letzter Beitrag: 29.08.08, 06:19
  3. ASPX Datei mit mehreren Code Behind Files ?
    Von KroaX_Net im Forum .NET Web und Kommunikation
    Antworten: 3
    Letzter Beitrag: 11.10.05, 16:52
  4. Antworten: 22
    Letzter Beitrag: 01.06.05, 15:53
  5. Antworten: 5
    Letzter Beitrag: 18.10.04, 17:05