Hallo!
Bin ganz neu hier im Forum und fühle mich grade sehr hilflos.
Habe seit Anfang der Woche angefangen, mit mich XML in Java zu beschäftigen, speziell mit DOM.
Habe dafür zwei Quelltexte aus dem Buch "Java und XML", 2. Aufl. von Brett McLaughlin.
Stelle die beiden Klassen hier mal ein:
Im Großen und Ganzen verstehe ich den Quelltext auch. Es ist mir z.B. klar, dass anscheinend in der Klasse SerializerTest die XML-Datei geparst wird.
Nur verstehe ich jetzt nicht, woher der Parser weiß, welche Datei und woher er sie nehmen soll.
Im Buch wird beschrieben, dass man den Dateipfad in die Argumente args[0] und args[1] übergeben soll.
Doch hier ist schon mein nächsten Problem: wie funktioniert das?
Anscheinend wird überall davon ausgegangen, dass man das shcon weiß, also geh ich davon aus, dass das ein sehr banales Problem ist.
Aber ich habe wirklich überhaupt keine Ahnung, wie man solche zusätzlichen Argumente vor dem Kompilieren eingibt.
Falls mir da irgendwer weiter helfen könnte, wäre ich wirklich höchst erfreut. Komme einfach nicht weiter und bei der Suche gebe ich wahrscheinlich die völlig falschen Begriffe ein, ich finde nämlich rein gar nichts!
Vielen, vielen Dank für jede Antwort schon mal im Voraus!!
LG Nadeshda
Bin ganz neu hier im Forum und fühle mich grade sehr hilflos.
Habe seit Anfang der Woche angefangen, mit mich XML in Java zu beschäftigen, speziell mit DOM.
Habe dafür zwei Quelltexte aus dem Buch "Java und XML", 2. Aufl. von Brett McLaughlin.
Stelle die beiden Klassen hier mal ein:
package javaxml2;
import java.io.File;
import org.w3c.dom.Document;
//parser-Import
import org.apache.xerces.parsers.DOMParser;
public class SerializerTest{
public void test(String xmlDocument, String outputFilename)
throws Exception {
File outputFile = new File(outputFilename);
DOMParser parser = new DOMParser();
// Den DOM-Baum als Dokument-Objekt erhalten
//erst wird das Dokument geparst --> DOM-Baum
parser.parse(xmlDocument);
//dann muss der DOM-Baum noch angefordert werden:
Document doc= parser.getDocument();
//Serialisieren
DOMSerializer serializer = new DOMSerializer();
serializer.serialize(doc, outputFile);
}
public static void main(String[] args){
if (args.length != 2){
System.out.println("Verwendung: java javaxml2.SerializerTest "+ "[zu lesendes XML-DOkument] "+" [Name der Ausgabedatei]");
System.exit(0);
}
try{
SerializerTest tester = new SerializerTest();
tester.test(args[0], args[1]);
}catch (Exception e){
e.printStackTrace();
}
}
}
import java.io.File;
import org.w3c.dom.Document;
//parser-Import
import org.apache.xerces.parsers.DOMParser;
public class SerializerTest{
public void test(String xmlDocument, String outputFilename)
throws Exception {
File outputFile = new File(outputFilename);
DOMParser parser = new DOMParser();
// Den DOM-Baum als Dokument-Objekt erhalten
//erst wird das Dokument geparst --> DOM-Baum
parser.parse(xmlDocument);
//dann muss der DOM-Baum noch angefordert werden:
Document doc= parser.getDocument();
//Serialisieren
DOMSerializer serializer = new DOMSerializer();
serializer.serialize(doc, outputFile);
}
public static void main(String[] args){
if (args.length != 2){
System.out.println("Verwendung: java javaxml2.SerializerTest "+ "[zu lesendes XML-DOkument] "+" [Name der Ausgabedatei]");
System.exit(0);
}
try{
SerializerTest tester = new SerializerTest();
tester.test(args[0], args[1]);
}catch (Exception e){
e.printStackTrace();
}
}
}
package javaxml2;
import java.io.*;
import org.w3c.dom.*;
public class DOMSerializer {
/** Zu verwendende Einrückung*/
private String indent;
/** Zu verwendender Zeilentrenner */
private String lineSeparator;
public DOMSerializer(){
indent="";
lineSeparator = "\n";
}
public void setLineSeparator(String lineSeparator){
this.lineSeparator = lineSeparator;
}
public void serialize(Document doc, OutputStream out)
throws IOException {
Writer writer = new OutputStreamWriter(out);
serialize(doc, writer);
}
public void serialize(Document doc, File file)
throws IOException {
Writer writer = new FileWriter(file);
serialize(doc, writer);
}
public void serialize(Document doc, Writer writer)
throws IOException {
// Dokument serialisieren
// Serialisierungsrekursion ohne Einrücken starten
serializeNode(doc, writer, "");
writer.flush();
}
public void serializeNode(Node node, Writer writer, String indentLevel)
throws IOException{
switch(node.getNodeType()){
case Node.DOCUMENT_NODE:
writer.write("<?xml version=\"1.0\"?>");
writer.write(lineSeparator);
//Rekursion über alle Kindobjekte
NodeList nodes = node.getChildNodes();
if (nodes != null){
for (int i=0; i<nodes.getLength(); i++){
serializeNode(nodes.item(i), writer, "");
}
}
/*
Document doc = (Document)node;
serializeNode (doc.getDocumentElement(), writer, "");
*/
break;
case Node.ELEMENT_NODE:
String name = node.getNodeName();
writer.write(indentLevel + "<" + name);
//Atribut ausgeben
NamedNodeMap attributes = node.getAttributes();
for (int i=0; i<attributes.getLength(); i++){
Node current = attributes.item(i);
writer.write(" " + current.getNodeName()+ "=\"" + current.getNodeValue() + "\"");
}
writer.write(">");
//Rekursion über jedes Kindobjekt
NodeList children = node.getChildNodes();
if (children != null){
if ((children.item(0)!= null) &&
(children.item(0).getNodeType()== Node.ELEMENT_NODE));{
writer.write(lineSeparator);
}
for (int i=0; i<children.getLength(); i++){
serializeNode(children.item(i), writer, indentLevel + indent);
}
if ((children.item(0) != null) && (children.item(children.getLength()-1) .getNodeType() == Node.ELEMENT_NODE)){
writer.write(indentLevel);
}
}
writer.write("</" + name + ">");
writer.write(lineSeparator);
break;
case Node.CDATA_SECTION_NODE:
writer.write("<![CDATA[" + node.getNodeValue() + "]]>");
break;
case Node.COMMENT_NODE:
writer.write(indentLevel + "<!--" + node.getNodeValue() + "-->");
writer.write(lineSeparator);
break;
case Node.PROCESSING_INSTRUCTION_NODE:
writer.write("<?"+node.getNodeName()+ " " + node.getNodeValue() + "?>");
writer.write(lineSeparator);
break;
case Node.ENTITY_REFERENCE_NODE:
writer.write("&" + node.getNodeName() + ";");
break;
case Node.DOCUMENT_TYPE_NODE:
DocumentType docType = (DocumentType)node;
writer.write("<!DOCTYPE " + docType.getName());
if (docType.getPublicId() != null){
System.out.println(" PUBLIC \"" + docType.getPublicId() + "\" ");
}else {
writer.write(" SYSTEM ");
}
writer.write("\"" + docType.getSystemId() + "\">");
writer.write(lineSeparator);
break;
case Node.TEXT_NODE:
writer.write(node.getNodeValue());
break;
}
}
}
import java.io.*;
import org.w3c.dom.*;
public class DOMSerializer {
/** Zu verwendende Einrückung*/
private String indent;
/** Zu verwendender Zeilentrenner */
private String lineSeparator;
public DOMSerializer(){
indent="";
lineSeparator = "\n";
}
public void setLineSeparator(String lineSeparator){
this.lineSeparator = lineSeparator;
}
public void serialize(Document doc, OutputStream out)
throws IOException {
Writer writer = new OutputStreamWriter(out);
serialize(doc, writer);
}
public void serialize(Document doc, File file)
throws IOException {
Writer writer = new FileWriter(file);
serialize(doc, writer);
}
public void serialize(Document doc, Writer writer)
throws IOException {
// Dokument serialisieren
// Serialisierungsrekursion ohne Einrücken starten
serializeNode(doc, writer, "");
writer.flush();
}
public void serializeNode(Node node, Writer writer, String indentLevel)
throws IOException{
switch(node.getNodeType()){
case Node.DOCUMENT_NODE:
writer.write("<?xml version=\"1.0\"?>");
writer.write(lineSeparator);
//Rekursion über alle Kindobjekte
NodeList nodes = node.getChildNodes();
if (nodes != null){
for (int i=0; i<nodes.getLength(); i++){
serializeNode(nodes.item(i), writer, "");
}
}
/*
Document doc = (Document)node;
serializeNode (doc.getDocumentElement(), writer, "");
*/
break;
case Node.ELEMENT_NODE:
String name = node.getNodeName();
writer.write(indentLevel + "<" + name);
//Atribut ausgeben
NamedNodeMap attributes = node.getAttributes();
for (int i=0; i<attributes.getLength(); i++){
Node current = attributes.item(i);
writer.write(" " + current.getNodeName()+ "=\"" + current.getNodeValue() + "\"");
}
writer.write(">");
//Rekursion über jedes Kindobjekt
NodeList children = node.getChildNodes();
if (children != null){
if ((children.item(0)!= null) &&
(children.item(0).getNodeType()== Node.ELEMENT_NODE));{
writer.write(lineSeparator);
}
for (int i=0; i<children.getLength(); i++){
serializeNode(children.item(i), writer, indentLevel + indent);
}
if ((children.item(0) != null) && (children.item(children.getLength()-1) .getNodeType() == Node.ELEMENT_NODE)){
writer.write(indentLevel);
}
}
writer.write("</" + name + ">");
writer.write(lineSeparator);
break;
case Node.CDATA_SECTION_NODE:
writer.write("<![CDATA[" + node.getNodeValue() + "]]>");
break;
case Node.COMMENT_NODE:
writer.write(indentLevel + "<!--" + node.getNodeValue() + "-->");
writer.write(lineSeparator);
break;
case Node.PROCESSING_INSTRUCTION_NODE:
writer.write("<?"+node.getNodeName()+ " " + node.getNodeValue() + "?>");
writer.write(lineSeparator);
break;
case Node.ENTITY_REFERENCE_NODE:
writer.write("&" + node.getNodeName() + ";");
break;
case Node.DOCUMENT_TYPE_NODE:
DocumentType docType = (DocumentType)node;
writer.write("<!DOCTYPE " + docType.getName());
if (docType.getPublicId() != null){
System.out.println(" PUBLIC \"" + docType.getPublicId() + "\" ");
}else {
writer.write(" SYSTEM ");
}
writer.write("\"" + docType.getSystemId() + "\">");
writer.write(lineSeparator);
break;
case Node.TEXT_NODE:
writer.write(node.getNodeValue());
break;
}
}
}
Nur verstehe ich jetzt nicht, woher der Parser weiß, welche Datei und woher er sie nehmen soll.
Im Buch wird beschrieben, dass man den Dateipfad in die Argumente args[0] und args[1] übergeben soll.
Doch hier ist schon mein nächsten Problem: wie funktioniert das?
Anscheinend wird überall davon ausgegangen, dass man das shcon weiß, also geh ich davon aus, dass das ein sehr banales Problem ist.
Aber ich habe wirklich überhaupt keine Ahnung, wie man solche zusätzlichen Argumente vor dem Kompilieren eingibt.
Falls mir da irgendwer weiter helfen könnte, wäre ich wirklich höchst erfreut. Komme einfach nicht weiter und bei der Suche gebe ich wahrscheinlich die völlig falschen Begriffe ein, ich finde nämlich rein gar nichts!
Vielen, vielen Dank für jede Antwort schon mal im Voraus!!
LG Nadeshda
Comment