![]() |
|
|
Themen-Optionen |
|
|
Nach oben #1 |
|
Neuer Benutzer
Registriert seit: 14.10.2004
Beiträge: 25
|
Hallo,
ich benutze den DOM-Parser aus dem JDK 1.5 und wollte ein Dokument Parsen, welches einen default Namespace hat (also im Wurzelelement das Attribut xmlns="http://www.meine-url.de"). Weil ich eventuell später andere Namensräume erlauben will um Namenskonflikten aus dem Weg zu gehen, will ich die Methode getElementsByTagNameNS aus Element benutzen. Das liefert mir aber keine Ergebniss-Elemente, wenn ich den default Namespace als argument übergebe. Es wird noch nicht mal ein Element gefunden, wenn ich als Namensraum "*" oder null übergebe. Mit getElementsByTagName werden die Elemente gefunden. Überhaupt scheint der Parser nirgendwo diesen Namensraum zu vergeben. Wenn ich auf dem entstandenen Document-Objekt isDefaultNamespace mit meiner URL als Parameter aufrufe, wird false zurückgegeben, übergebe ich null wird true zurückgegeben. Rufe ich getNamespaceURI() auf dem Document-Objekt oder einem Kind-Element auf, wird null zurückgegeben. Da ich weder Lust habe bei allen Elementen einen Prefix einzuführen, noch manuell in dem Wurzelelement nachzuschauen, ob das xmlns-Attribut richtig gesetzt ist und in dem Fall getElementsByTagName statt getElementsByTagNameNS zu verwenden, wüßte ich gerne ob es einen Weg gibt dem Document-Objekt beizubringen welchen default Namespace es hat. Viele Grüße, Max |
|
|
|
|
|
Nach oben #2 | |
|
Erfahrener Benutzer
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.619
|
Hallo,
ich kann Dir Deine Frage zwar nicht beantworten, allerdings habe ich eine Frage hierzu: Zitat:
Meinst Du, dass Du nur einen Namensraum vergibst und dann "Pseudo-namespaces" via Präfix? Danke für die Information. |
|
|
|
|
|
|
Nach oben #3 | ||
|
Erfahrener Benutzer
Registriert seit: 02.03.2006
Ort: Aachen
Beiträge: 123
|
Zitat:
Ben: Man kann ein default namespace festlegen <html xmlns="http://www.w3.org/1999/xhtml"> Alle in <html> enthaltene tags sind somit dem http://www.w3.org/1999/xhtml namespace zugeordnet. Aber leider erhält man duch Aufruf von getNamespaceURI eines solchen elements NICHT http://www.w3.org/1999/xhtml sondern gar keinen namespace. Dies würde nur so funktionieren: <html xmlns:htm="http://www.w3.org/1999/xhtml"> <htm:head>...</htm:head> <...> </html> Bisher habe ich dieses prolem aber auch eher ignoriert udn noch kene praktische lösung gefunden Also falls du was findest Böreck wäre ich an der Lösung auch SEHR interessiert. gruß Dennis Jedoch w |
||
|
|
|
|
|
Nach oben #4 |
|
Erfahrener Benutzer
Registriert seit: 02.03.2006
Ort: Aachen
Beiträge: 123
|
Also ich habe mich jetzt mal selbst damit beschäftigt. Ich ahbe vorher Dom4J verwendet, wollte jetzt aber bei der Java API bleiben.
Ich parse folgende xml Datei: HTML-Code:
<?xml version="1.0" encoding="UTF-8"?> <config xmlns="http://www.y2k1.org/thor/config"> <import>org.thorframework.test</import> <engine class="PackageEngine"> <property name="rootPackage" value="org.thorframework.test.core" /> </engine> <module name="MailSender" class="MailSender"> <property name="host" value="mail.y2k1.org" /> <property name="username" value="dennis@xardias.net" /> <property name="password" value="" /> <property name="from" value="dennis@xardias.net" /> </module> </config> Code:
public class XMLParserTest
{
static final String JAXP_SCHEMA_LANGUAGE = "http://java.sun.com/xml/jaxp/properties/schemaLanguage";
static final String JAXP_SCHEMA_SOURCE = "http://java.sun.com/xml/jaxp/properties/schemaSource";
static final String W3C_XML_SCHEMA = "http://www.w3.org/2001/XMLSchema";
static final String THOR_SCHEMA_SOURCE = "schema/config.xsd";
public static void main(String... args) throws Exception
{
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setAttribute(JAXP_SCHEMA_LANGUAGE, W3C_XML_SCHEMA); // turn on schema validation
factory.setAttribute(JAXP_SCHEMA_SOURCE, THOR_SCHEMA_SOURCE); // assign schema source
factory.setValidating(true);
factory.setNamespaceAware(true);
DocumentBuilder documentBuilder = factory.newDocumentBuilder();
Document document = documentBuilder.parse(new File("WEB-INF/thor.xml"));
System.out.println(document.toString()+" - "+document.getNamespaceURI());
// fetch the root node
Node rootNode = document.getChildNodes().item(0);
System.out.println(rootNode.toString()+" - "+rootNode.getNamespaceURI());
// print its children
for(int i=0; i<rootNode.getChildNodes().getLength(); ++i)
{
Node node = rootNode.getChildNodes().item(i);
System.out.println(node.toString()+" - "+node.getNamespaceURI());
}
}
}
vielleicht hilft es dir ja. |
|
|
|
![]() |
| Lesezeichen |
| Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | |
| Themen-Optionen | |
|
|
Ähnliche Themen
|
||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| Welches Join soll ich verwenden? | Chr!s | Datenbanken | 8 | 06.07.2006 12:33 |
| Query verbessern? | björn | Datenbanken | 4 | 05.06.2006 13:48 |
| Problem mit getNodeValue() und setNodeValue() in DOM | Zauberlehrling | HTML, XML und CSS | 1 | 21.08.2005 19:08 |
| [BUCH] Java ist auch eine Insel | kampet | Literatur | 5 | 22.02.2005 14:40 |
| Dom für html mit java | bluelight | Allgemeine Java-Programmierung | 1 | 29.11.2004 16:28 |