Hi,
bin auf der Suche nach einem vollkommen korrekten REGEX für die XML Declaration und den Doctype.
Was ich habe ist
Declaration
Doctype
Gibt es eine andere Möglichkeit die Declaration und den Doctype aus einem XML File zu extrahieren? Es sollte alles über einen BufferedReader laufen, da der Rest später noch zerstückelt wird.
Komischerweise hängt er sich in dieser Methode am match auf. Warum kann ich nicht sagen. Möglicherweise weiß jemand warum.
Gruß
Romsl
bin auf der Suche nach einem vollkommen korrekten REGEX für die XML Declaration und den Doctype.
Was ich habe ist
Declaration
Code:
Pattern.compile("(\\s|.)*<\\?.*version=[\"'](.*?)[\"'].*(encoding=[\"'](.*?)[\"'])?.*\\?>")
Doctype
Code:
Pattern.compile("(\\s|.)*<!DOCTYPE\\s(.*?)\\s(SYSTEM((\\s|\\n)\"(.*)\")?|(.*PUBLIC(\\s|\\n)*\".*\"))(\\s|\\n)*\".*\\.dtd\">");
Gibt es eine andere Möglichkeit die Declaration und den Doctype aus einem XML File zu extrahieren? Es sollte alles über einen BufferedReader laufen, da der Rest später noch zerstückelt wird.
Komischerweise hängt er sich in dieser Methode am match auf. Warum kann ich nicht sagen. Möglicherweise weiß jemand warum.
Code:
private char[] extractDoctype() {
// TODO: prepare this regex for new line doctypes
StringBuffer doctype = new StringBuffer();
Pattern doctypePattern = Pattern.compile("(\\s|.)*<!DOCTYPE\\s(.*?)\\s(SYSTEM((\\s|\\n)\"(.*)\")?|(.*PUBLIC(\\s|\\n)*\".*\"))(\\s|\\n)*\".*\\.dtd\">");
Pattern commentPattern = Pattern.compile("(\\s|.)*<!--(.*)-->");
while (!doctypePattern.matcher(doctype).matches()) {
char c;
for (c = nextChar(); c != '>'; c = nextChar()) {
doctype.append(c);
}
doctype.append(c);
if (commentPattern.matcher(doctype).matches()) {
doctype = new StringBuffer();
}
}
if (LOG.isDebugEnabled()) {
LOG.debug("The doctype of the xml document: \"" + doctype.toString().trim() + "\"");
}
return doctype.toString().toCharArray();
}
Gruß
Romsl