Whitespaces verschieben Inhalte

wdmprojekt

Mitglied
Hallo,

ich habe folgendes Problem für das ich eine Lösung suche:

Beim Parsen eines XML Dokuments werden die einzelnen Tags
<tag></tag> normaler Weise einem Tabellenfeld zugeordnet.
Bei mir ist es nun so, dass wenn ein Tag Whitespace
beinhaltet, wie zum Beispiel <tag>Ein Text</tag>, nun
der erste String in das erste Tabellenfeld und der
zweite String in das zweite Tabellenfeld geschrieben wird.

Wie kann ich Java sagen: Egal wieviel Whitespaces, füge Taginhalt in EIN Tabellenfeld?
 

wdmprojekt

Mitglied
Ich parse mit Hilfe des Document Builders:

Java:
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document doc = db.parse("C:/sample.xml");

Anschließend daran definiere ich mir meine auszulesenden Tags:

Java:
/**
 * Schema:
 * <link name="category">
 * <title></title>
 * <url></url>
 * <created></created>
 * </link>
 */
NodeList n1 = doc.getElementsByTagName("title");
NodeList n2 = doc.getElementsByTagName("url");
NodeList n3 = doc.getElementsByTagName("created");

NodeList listOfLinks = doc.getElementsByTagName("link");

Das Hinzufügen realisiere ich mittels Vektoren, da
das XML Dokument in einen jTable integriert wird:

Java:
String data1 = "", data2 = "", data3 = "";
data = new Vector();
columns = new Vector();
                        
for (int i = 0; i < listOfLinks.getLength(); i++) {
    data1 = n1.item(i).getFirstChild().getNodeValue();
    data2 = n2.item(i).getFirstChild().getNodeValue();
    data3 = n3.item(i).getFirstChild().getNodeValue();

    String line = data1 + " " + data2 + " " + data3;
    
    StringTokenizer st2 = new StringTokenizer(line, " ");
    
    while (st2.hasMoreTokens())
        data.addElement(st2.nextToken());
}

columns.add("");
columns.add("");
columns.add("");

Die Integration in das jPanel geschieht so:

Java:
jScrollPane1 = new JScrollPane();
{						
XMLInJTable t = new XMLInJTable();
jTable1 = new JTable();
jScrollPane1.setViewportView(jTable1);
jTable1.setModel(t);
}
 

XHelp

Top Contributor
Ohne genauer hinzusehen:
[JAVA=10]
String line = data1 + " " + data2 + " " + data3;

StringTokenizer st2 = new StringTokenizer(line, " ");

while (st2.hasMoreTokens())
data.addElement(st2.nextToken());
[/code]
Könnte es daran liegen, dass du alles zusammenschmeißt und dann nach Leerzeichen splitest?
 

wdmprojekt

Mitglied
Ja, daran lag es. Habe es mit Semikolon-Trennungen hinbekommen.

Vielen Dank :)

Java:
String line = data1 + ";" + data2 + ";" + data3;
    
StringTokenizer st2 = new StringTokenizer(line, ";");
    
while (st2.hasMoreTokens())
    data.addElement(st2.nextToken());
 
Zuletzt bearbeitet:

wdmprojekt

Mitglied
Nun habe ich ein Folge-Problem:

Ich möchte in der Tabelle lediglich die Einträge mit bestimmter Link-Kategorie:

<JAVA>
/**
* Schema:
* <link name="category">
* <title></title>
* <url></url>
* <created></created>
* </link>
*/
</JAVA>

Wie kann ich das anhand des bestenden Codes umsetzen?
 

wdmprojekt

Mitglied
XPath Tutorial

ist zwar gut zu lesen, aber nicht vereinbar mit meinem bestehenden Code... (?),
weil nicht aufgezeigt wird, wie ich "@name" aufzurufen habe...

Heißt es dann:

listOfLinks["@name"] ?

Das wäre für mich logisch, da ich für die Element-Sequenz <link> das
Attribut name anspreche. Dies funktioiniert jedoch leider nicht.
 

XHelp

Top Contributor
Was ist listOfLinks?
mit XPath kannst du die Sachen direkt aus der XML filtern. Wenn du es komplett eingelesen hast, dann wäre eine nachträgliche Filterung eine überlegung wert.
 

wdmprojekt

Mitglied
listOfLinks erwähne ich im Kontext meines oben aufgeführten Quellcodes:

NodeList listOfLinks = doc.getElementsByTagName("link");

Ich habe keine Ahnung wie ich die nachträgliche Filterung vornehmen muss... Tipp?
 

XHelp

Top Contributor
Mit nachträglicher Filterung meine ich folgendes:
Du speicherst ja irgendwo deine Elemente. Du gehst die durch und wenn deine Kriterien nicht erfüllt sind, dann schmeißt du den Eintrag raus.
 

wdmprojekt

Mitglied
Habe nun eine Lösung gefunden:

Ich übergebe meiner Klasse XMLInJTable die Kategorie als String,
die angezeigt werden soll. Im Anschluss daran folgt eine einfache if-Anweisung.

Java:
//Main.java
XMLInJTable t = new XMLInJTable("sample1.xml", "category1");

//XMLInJTable.java
if (category.equals(listOfLinks.item(i).getAttributes().getNamedItem("name").getNodeValue().toString())) {
...
}
 
Zuletzt bearbeitet:

Ähnliche Java Themen


Oben