1Danke
ERLEDIGT
JA
JA
ANTWORTEN
6
6
ZUGRIFFE
3108
3108
EMPFEHLEN
-
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 CodeCode :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(); } } }
-
26.02.08 13:13 #2
- 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)
-
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!
-
26.02.08 13:23 #4MeinerEiner_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
-
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ß
ThomasGeändert von theone101 (26.02.08 um 14:43 Uhr)
-
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.
Versuche nie Probleme zu lösen, von deren Existenz du noch gar nichts weißt!
-
Hallo,
hab des jetzt mal ausprobiert. Es Funktioniert.
Ja des wars. DANKE shutdown.
Gruß
ThomasGeändert von theone101 (27.02.08 um 07:56 Uhr)
Ähnliche Themen
-
Text Datei einlesen und ausgeben
Von sakizzo im Forum JavaAntworten: 7Letzter Beitrag: 10.03.10, 20:19 -
Daten aus php Datei einlesen und ausgeben
Von Pearl81 im Forum PHPAntworten: 0Letzter Beitrag: 29.08.08, 06:19 -
ASPX Datei mit mehreren Code Behind Files ?
Von KroaX_Net im Forum .NET Web und KommunikationAntworten: 3Letzter Beitrag: 11.10.05, 16:52 -
*.txt Files Zeilenweise einlesen und in neue *.txt files ausgeben
Von philishake im Forum C/C++Antworten: 22Letzter Beitrag: 01.06.05, 15:53 -
Statistik Dateiauswertung war: .txt-datei einlesen/ausgeben
Von joez im Forum JavaAntworten: 5Letzter Beitrag: 18.10.04, 17:05





Zitieren
Login




