XML-Datei parsen

Neue Frage »

Auf diesen Beitrag antworten »
deppensido XML-Datei parsen

hallo,

die XML-Datei, um die es geht ist in dem angehängten Zip-Ordner.
Ich versuche daraus die Texte herauszulesen um diese in
einem Array speichern zu können. Ich versuche das momentan
mit R, weil ich die Texte später für eine Analyse brauche.
Es würde mir aber auch sehr viel weiter helfen, wenn man
es anhand einer anderen Programmiersprache, z.B. Java
erklären könnte. Das Problem besteht eigentlich darin, dass
ich irgendwie an die Knoten nicht drannkomme, die die
Texte enthalten. Soweit ich das bisher verstehe befinden sich
die Texte unter den Tags "text", "page", "balloon" und dort neben
den Tags "area" und "point" jeweils unter "<p>dies ist ein Text</p>.

area und die dazugehörigen points gehören zu "balloon" und da ist ganz
am Ende immer <p></p> worin jeweils der Text steht. Wie könnte ich
an diese rankommen? Bin für jede Hilfe dankbar.
 
Auf diesen Beitrag antworten »
eulerscheZahl

Für so etwas gibt es Bibiotheken, die sich je nach Sprache ziemlich unterscheiden können. Ich kann kein R, habe aber auch da eine Bibliothek gefunden.
Hier etwas C#, einmal mit und einmal ohne Bibliothek:
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:
using System;
using System.IO;
using System.Collections.Generic;
using System.Linq;
using System.Xml.Linq;

namespace XMLParser
{
	class MainClass
	{
		public static void Main (string[] args)
		{
			Console.WriteLine (string.Join ("\n", ParseLibrary ("beispiel.xml")));
		}

		public static string[] ParseManual(string filename) {
			List<string> texts = new List<string> ();
			string xml = File.ReadAllText (filename);
			while(xml.IndexOf("<balloon who=\"") > 0) {
				xml = xml.Substring (xml.IndexOf ("<balloon who=\"") + 14);
				texts.Add (xml.Substring (0, xml.IndexOf ("\"")));
				xml = xml.Substring (xml.IndexOf ("<p>") + 3);
				texts.Add ("    " + xml.Substring (0, xml.IndexOf ("</p>")));
			}
			return texts.ToArray ();
		}

		public static string[] ParseLibrary(string filename) {
			XElement root = XElement.Load (filename);
			List<string> entries = new List<string> ();
			ParseLibraryRecurs (root, entries);
			return entries.ToArray ();
		}

		private static void ParseLibraryRecurs(XElement node, List<string> list) {
			if (node.Name.LocalName == "balloon" && node.Attribute ("who") != null) {
				list.Add (node.Attribute ("who").Value);
			}
			if (node.Name.LocalName == "p") {
				list.Add ("    " + node.Value);
			}
			foreach (XElement elem in node.Elements()) {
				ParseLibraryRecurs (elem, list);
			}
		}
	}
}


Ausgabe:
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
William Corrigan
    öchö öchö
William Corrigan
    Fotoalben, Sonntagsbraten, Familienausflüge... alles Blödsinn, wenn Du mich fragst
Phone
    Drring
William Corrigan
    öchö
Jimmy Corrigan
    M... Mom?
Phone
    Drring
Jimmy Corrigan
    H...Hallo?
Jimmy Corrigan
    Ach, g... ganz gut... u... und wie geht's Dir?
William Corrigan
    Obwohl... So ein Braten ist eigentlich gar nicht so übel. Ha Ha.	
Jimmys Mom
    Wir sind da, Jimmy. Hier wollen wir essen.
Auf diesen Beitrag antworten »
deppensido

danke, das hat mir sehr weitergeholfen.
 
Neue Frage »
Antworten »


Verwandte Themen

Die Beliebtesten »
Die Größten »
Die Neuesten »