Hi
Ich habe eine XML Datei, die ich mir per php selbst generiere. Diese möchte ich per Java Client nun herunterladen und parsen.
Eine XML Beispieldatei sieht in etwa so aus: <![CDATA[Arctic Infiltration]]>
Der Client läd sich diese Datei nun mit entsprechendem Request in einen String und soll ihn nun dem XML Parser übergeben. Das geschieht hier:
[Java]public boolean parseRequestString() {
if (rawAnswer.charAt(0) == '0' && rawAnswer.charAt(1) == ':') {
answerStatus = 0;
debugLog.addElement("Answer reported a failure: "+rawAnswer.toString());
return false;
} else if (rawAnswer.charAt(0) == '1' && rawAnswer.charAt(1) == ':') {
answerStatus = 0;
debugLog.addElement("Answer contained a dummy response: "+rawAnswer.toString());
return false;
}
try {
DocumentBuilderFactory dbf =
DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
InputSource is = new InputSource();
is.setCharacterStream(new StringReader(rawAnswer.toString()));
Document doc = db.parse(is);
NodeList nodes = doc.getElementsByTagName("addonlist");
// iterate the employees
for (int i = 0; i < nodes.getLength(); i++) {
Element element = (Element) nodes.item(i);
NodeList name = element.getElementsByTagName("name");
Element line = (Element) name.item(0);
System.out.println("Name: " + getCharacterDataFromElement(line));
NodeList title = element.getElementsByTagName("title");
line = (Element) title.item(0);
System.out.println("Title: " + getCharacterDataFromElement(line));
}
}
catch (Exception e) {
e.printStackTrace();
}
return true;
}
public static String getCharacterDataFromElement(Element e) {
Node child = e.getFirstChild();
if (child instanceof CharacterData) {
CharacterData cd = (CharacterData) child;
return cd.getData();
}
return "?";
}
[/Java]
Der Hauptteil ab dem try Block ist aus einem Tutorial kopiert, bis dahin bin ich noch nicht gekommen da die Exception vorher geworfen wird. Die Exception wird in Zeile 20 geworfen.
Der Error:
Ich sehe am End-Tag von </description> kein Problem, außer dass es der erste Tag ist, der nicht innerhalb einer Zeile geschlossen wird. Zeilenumbrüche möchte ich mir dennoch erhalten. Muss ich da noch eine Option beifügen?
Ich habe eine XML Datei, die ich mir per php selbst generiere. Diese möchte ich per Java Client nun herunterladen und parsen.
Eine XML Beispieldatei sieht in etwa so aus: <![CDATA[Arctic Infiltration]]>
Der Client läd sich diese Datei nun mit entsprechendem Request in einen String und soll ihn nun dem XML Parser übergeben. Das geschieht hier:
[Java]public boolean parseRequestString() {
if (rawAnswer.charAt(0) == '0' && rawAnswer.charAt(1) == ':') {
answerStatus = 0;
debugLog.addElement("Answer reported a failure: "+rawAnswer.toString());
return false;
} else if (rawAnswer.charAt(0) == '1' && rawAnswer.charAt(1) == ':') {
answerStatus = 0;
debugLog.addElement("Answer contained a dummy response: "+rawAnswer.toString());
return false;
}
try {
DocumentBuilderFactory dbf =
DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
InputSource is = new InputSource();
is.setCharacterStream(new StringReader(rawAnswer.toString()));
Document doc = db.parse(is);
NodeList nodes = doc.getElementsByTagName("addonlist");
// iterate the employees
for (int i = 0; i < nodes.getLength(); i++) {
Element element = (Element) nodes.item(i);
NodeList name = element.getElementsByTagName("name");
Element line = (Element) name.item(0);
System.out.println("Name: " + getCharacterDataFromElement(line));
NodeList title = element.getElementsByTagName("title");
line = (Element) title.item(0);
System.out.println("Title: " + getCharacterDataFromElement(line));
}
}
catch (Exception e) {
e.printStackTrace();
}
return true;
}
public static String getCharacterDataFromElement(Element e) {
Node child = e.getFirstChild();
if (child instanceof CharacterData) {
CharacterData cd = (CharacterData) child;
return cd.getData();
}
return "?";
}
[/Java]
Der Hauptteil ab dem try Block ist aus einem Tutorial kopiert, bis dahin bin ich noch nicht gekommen da die Exception vorher geworfen wird. Die Exception wird in Zeile 20 geworfen.
Der Error:
Code:
[Fatal Error] :1:869: The element type "description" must be terminated by the matching end-tag "</description>".
org.xml.sax.SAXParseException: The element type "description" must be terminated by the matching end-tag "</description>".
at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(Unknown Source)
at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(Unknown Source)
at SwarmInterface.SwarmController.parseRequestString(SwarmController.java:196)
Ich sehe am End-Tag von </description> kein Problem, außer dass es der erste Tag ist, der nicht innerhalb einer Zeile geschlossen wird. Zeilenumbrüche möchte ich mir dennoch erhalten. Muss ich da noch eine Option beifügen?