2010-07-21 16 views
0

J'utilise des documents DOM XML avec deux espaces de noms. Par exemple, considérons le document suivant:Problèmes d'espace de noms XML DOM conflictuels

<entry xmlns="http://www.w3.org/2005/Atom" xmlns:libx="http://libx.org/xml/libx2"> 
    <id>5</id> 
    <title>Put Google Book results into Addison</title> 
    <updated>2009-02-23T10:12:15Z</updated> 
    <author> 
    <name>LibX Team</name> 
    <uri>http://libx.org</uri> 
    <email>[email protected]</email> 
    </author> 
    <libx:libapp> 
    <libx:entry xmlns:libx="http://libx.org/xml/libx2" src="6"/> 
    <libx:entry xmlns:libx="http://libx.org/xml/libx2" src="7"/> 
    </libx:libapp> 
</entry> 

Je les doutes suivants par rapport à namespaces:

1) Si je ne préfixe pas l'espace de noms aux noeuds (id, titre, auteur, etc.) comme dans l'exemple ci-dessus, seront-ils assignés à l'espace de noms par défaut: "http://www.w3.org/2005/Atom"? Si non, quel espace de noms seraient-ils assignés?

2) La méthode getNameSpaceURI d'un nœud renvoie - L'espace de noms URI du nœud, ou null s'il n'est pas spécifié. Mais comment puis-je connaître l'espace de noms du nœud s'il n'est pas spécifié? La signification est là un moyen de savoir si l'espace de noms par défaut est assigné au noeud ou si un autre espace de noms est assigné? 3) Quand, je copie les noeuds (avec les espaces de noms par défaut) d'un document particulier dans un autre document, les noeuds conservent les espaces de noms originaux ou occupent-ils l'espace de noms par défaut du nouveau document dans lequel ces noeuds sont copiés? ? Si ce dernier est vrai, comment puis-je conserver les espaces de noms d'origine? Enfin, quelqu'un pourrait-il me diriger vers un bon matériel en ligne pour mieux comprendre ces problèmes d'espace de noms contradictoires?

Merci, Sidhartha

Répondre

0

Pour des tutoriels d'espace de noms voir this, this. et this

maintenant pour vos questions:

  1. Avec xmlns vous déclare l'espace de noms par défaut -> si vous ne préfixe pas un élément de l'espace de noms par défaut sera inspectée pour la définition de l'élément.
  2. Si ma compréhension est correcte, pour un nœud non préfixé, getNameSpaceURI retournera l'espace de noms par défaut (ou null si aucun espace de noms par défaut n'est déclaré).
  3. La solution dépend des outils (XSLT, .net wrappers, etc.) que vous utilisez pour effectuer la copie. Si vous quoi faire la copie en utilisant. NET jetez un oeil à tutoriel this (nœud important: pour déplacer correctement un nœud utiliser ImportNode).