Sers,
beim Parsen meiner Xml-Files (<?xml version="1.0" encoding="UTF-8" standalone="no" ?>) lese ich einen Text aus, welcher vorher von einem Datensatz entschlüsselt wurde. Im besten Fall sind es Zahlen, wie "9994447773", im schlechtesten Sonderzeichen, wie "Ð,s+Þî?ÌÔ".
Das schafft der Parser nicht und wirft einen Fatal Error aus.
Die fehlerhaften Zeichen befinden sich in "XXX_tid" und "XXX_serialnumber". Ich möchte gern alles als String woanders ausgeben. Aber das geht mit meiner bisherigen Methode wohl schlecht. Hat jemand einen Lösungsansatz oder einen Link, der mir hilft das ganze zu lösen ohne vorher die Xml-Files richtigzustellen?
Die "XXX_tid" und "XXX_serialnumber" können dabei ruhig verworfen, bzw. falsch zurückgegeben werden, wenn die Zeichen nicht stimmen. Hauptsache der Rest (und bei gültigen Files natürlich alles) wird angezeigt. :/
beim Parsen meiner Xml-Files (<?xml version="1.0" encoding="UTF-8" standalone="no" ?>) lese ich einen Text aus, welcher vorher von einem Datensatz entschlüsselt wurde. Im besten Fall sind es Zahlen, wie "9994447773", im schlechtesten Sonderzeichen, wie "Ð,s+Þî?ÌÔ".
Das schafft der Parser nicht und wirft einen Fatal Error aus.
Java:
/**
* Xml-Daten extrahieren
* @param _FileName
*/
private void parseXml(String _FileName) {
try {
String fileName = _FileName;
// ---- Parse XML file ----
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.parse( new File( fileName ) );
showTagId = searchXml(document, "ObjectEvent", "XXX_tid");
showOriginal = searchXml(document, "ObjectEvent", "XXX_originality");
showEpc = searchXml(document, "epcList", "epc");
showAction = searchXml(document, "ObjectEvent", "action");
showSerialNo = searchXml(document, "ObjectEvent", "XXX_serialnumber");
showEventTime = searchXml(document, "ObjectEvent", "eventTime");
}
catch( SAXParseException spe ) {
System.out.println( "\n** Parsing error, line " + spe.getLineNumber() + ", uri " + spe.getSystemId() );
System.out.println( " " + spe.getMessage() );
Exception e = ( spe.getException() != null ) ? spe.getException() : spe;
e.printStackTrace();
}
catch( SAXException sxe ) {
Exception e = ( sxe.getException() != null ) ? sxe.getException() : sxe;
e.printStackTrace();
}
catch( ParserConfigurationException pce ) {
pce.printStackTrace();
}
catch( IOException ioe ) {
ioe.printStackTrace();
}
}
Java:
/**
* durchsucht die Xml nach dem Wert von _Child und gibt ihn zurück
* @param _Name
* @param _Element
* @param _Child
* @return
*/
private String searchXml(Document _Name, String _Element, String _Child)
{
Document name = _Name;
String element = _Element;
String child = _Child;
// ---- Get list of nodes to given tag ----
NodeList ndList = name.getElementsByTagName( element );
// ---- Loop through the list of main nodes ----
for( int i=0; i<ndList.getLength(); i++ )
{
Node nodeMain = ndList.item( i );
Node nodeChild = null;
NodeList ndListChilds = nodeMain.getChildNodes();
boolean bChildFound = false;
if( null == ndListChilds ) continue;
// Loop through the list of child nodes
for( int j=0; j<ndListChilds.getLength(); j++ )
{
nodeChild = ndListChilds.item( j );
if( null == nodeChild ) continue;
String sNodeName = nodeChild.getNodeName();
if( null == sNodeName ) continue;
if( sNodeName.equals( child ) )
{
bChildFound = true;
break;
}
}
if (bChildFound == true) {
return nodeChild.getFirstChild().getNodeValue();
}
else {
return "unknown";
}
}
return "unknown";
}
Die fehlerhaften Zeichen befinden sich in "XXX_tid" und "XXX_serialnumber". Ich möchte gern alles als String woanders ausgeben. Aber das geht mit meiner bisherigen Methode wohl schlecht. Hat jemand einen Lösungsansatz oder einen Link, der mir hilft das ganze zu lösen ohne vorher die Xml-Files richtigzustellen?
Die "XXX_tid" und "XXX_serialnumber" können dabei ruhig verworfen, bzw. falsch zurückgegeben werden, wenn die Zeichen nicht stimmen. Hauptsache der Rest (und bei gültigen Files natürlich alles) wird angezeigt. :/
Zuletzt bearbeitet: