Wir verwenden dom4j 1.6.1, um XML von irgendwo kommend zu analysieren. Manchmal haben die Balise den Namespace (zB:) und manchmal nicht(). Und es ist ein Aufruf von Element.selectSingleNode (String s) fehlgeschlagen.Saubere Namespace-Behandlung mit dom4j
Vorerst haben wir 3 Lösungen, und wir sind mit ihnen nicht zufrieden
1 - alle Namespace-Vorkommen entfernen, bevor irgendetwas mit dem XML-Dokument
xml = xml .replaceAll("xmlns=\"[^\"]*\"","");
xml = xml .replaceAll("ds:","");
xml = xml .replaceAll("etm:","");
[...] // and so on for each kind of namespace
2 tun - Entfernen Namespace, kurz bevor ein immer Knoten von
Element.remove(Namespace ns)
Aufruf Aber es funktioniert nur für einen Knoten und der ersten Ebene des Kindes
3 - Clutter den Code von
node = rootElement.selectSingleNode(NameWithoutNameSpace)
if (node == null)
node = rootElement.selectSingleNode(NameWithNameSpace)
Also ... was denken Sie? Hexe eins ist die weniger schlimm? Hast du andere Lösung vorzuschlagen?
ich werde versuchen, das Dokument über Namespace mit null Präfix graben. Danke trotzdem. Über die Quelle der XML-Datei: theire ist nicht so, dass sie nichts ändern. Aber die Datei mit oder ohne Namespace ist gültig. Mit den Dateien erstellen wir Objekte, die wir in unserem System verwenden. Aber wir haben nie etwas "geschrieben". (Wir haben nicht Recht, die XML-Datei zu ändern) –