2010-03-18 5 views
4

Exemple XML en utilisant des noeuds d'élément:Attributs XML ou nœuds d'élément?

<?xml version="1.0" encoding="utf-8"?> 
<users> 
    <user> 
    <name>David Smith</name> 
    <phone>0441 234443</phone> 
    <email>[email protected]</email> 
    <addresses> 
     <address> 
     <street>1 Some Street</street> 
     <town>Toy Town</town> 
     <country>UK</country> 
     </address> 
     <address> 
     <street>5 New Street</street> 
     <town>Lego City</town> 
     <country>US</country> 
     </address> 
    </addresses> 
    </user> 
</users> 

attributs à l'aide XML Exemple:

<?xml version="1.0" encoding="utf-8"?> 
<users> 
    <user name="David Smith" phone="0441 234443" email="[email protected]"> 
    <addresses> 
     <address street="1 Some Street" town="Toy Town" country="UK" /> 
     <address street="5 New Street" town="Lego City" country="US" /> 
    </addresses> 
    </user> 
</users> 

Je besoin de créer un fichier XML basé sur des données à partir d'une base de données relationnelle et ne peut pas travailler si Je devrais utiliser des attributs ou des éléments.

Quelle est la meilleure pratique lors de la création de fichiers XML et pourquoi?

+1

Il y a plusieurs doublons de cette même question sur le SO, y compris un dans la dernière semaine. – Rob

Répondre

5

L'un des meilleurs articles que j'ai lus est "Principles of XML design: When to use elements versus attributes", qui n'essaie pas de vous donner une réponse complète, mais qui donne de bons éléments de réflexion avec des exemples.

Je suggère que le conseil dans l'article penche vers votre première conception; Vous pourriez être intéressé de lire la partie sur la représentation des noms.

-2

Je préférerais utiliser des attributs sur un sous-élément.

+2

Voulez-vous expliquer? Je serais intéressé de connaître vos raisons, je suppose que OP serait aussi. –

0

J'utilise un attribut uniquement pour les ID (dans ce cas, je mettrais seulement le pays dans un attribut), quand vous avez du texte, c'est mieux + CDATA (si vous êtes sûr que vous n'aurez jamais de caractère spécial dans votre texte, vous pouvez omettre le cdata).

3

Pour vous aider dans votre choix, vous devez être conscient des différences suivantes entre les éléments et attributs:

  • Un élément ne peut pas avoir deux attributs avec le même nom. En particulier, si vous utilisez des attributs, vous ne pouvez pas attribuer deux attributs phone à un utilisateur.
  • Dans un élément, vous pouvez imbriquer d'autres éléments enfants, comme vous l'avez fait avec les adresses . Par exemple, vous pouvez imbriquer un prénom, un prénom nom et un nom de famille dans le nom d'un utilisateur. Avec un attribut, vous ne pouvez pas faire cela, de sorte que les attributs ne fonctionnent que pour une hiérarchie relativement plate.
  • Si vous utilisez des espaces de noms, les éléments enfants héritent de la liaison d'espace de noms par défaut. Les attributs ne le font pas.
  • Les éléments enfants sont classés, les attributs ne le sont pas: si vous utilisez des attributs, vous ne pouvez pas vous fier à la préservation de leur ordre.
  • Dans un élément, vous avez la possibilité d'utiliser une section CDATA afin de ne pas avoir à vous soucier d'échapper des caractères spéciaux tels que <. Dans un attribut, vous devrez soit échapper toutes les citations avec & quot; si l'attribut est entre guillemets, ou pour échapper toutes les apostrophes avec & apos; si la valeur de l'attribut est entre apostrophes.
1

je serais preffer la syntaxe suivante:

<?xml version="1.0" encoding="utf-8"?> 
<users> 
    <user> 
    <name first-name="David" last-name="Smith" /> 
    <phone home-phone="0441 234443" /> 
    <email private-email="[email protected]" /> 
    <addresses> 
     <address street="1 Some Street" town="Toy Town" country="UK" /> 
     <address street="5 New Street" town="Lego City" country="US" /> 
    </addresses> 
    </user> 
</users> 

Je pense qu'il semble mieux si vous choisissez des éléments pour des choses qui peuvent être répétées et peuvent avoir des sous-éléments et dans d'autres cas, personnellement, j'utiliser des attributs , car ils peuvent économiser beaucoup d'espace mémoire.Comme xdib-team a dit ci-dessus:

Un élément ne peut pas avoir deux attributs avec le même nom. En particulier, si vous utilisez des attributs, vous ne pouvez pas attribuer deux attributs de téléphone à un utilisateur.

C'est pourquoi je préfère la syntaxe ci-dessus. J'ai décidé de prendre l'élément pour un nom mais j'ai assez d'options pour le nom de famille comme attribut et je pense que les attributs sont suffisants dans ce cas parce qu'il n'y a rien de plus qui devrait être emboîté sous eux. Vous pouvez avoir plus d'une adresse mais chaque adresse peut avoir une rue et une ville. C'est comme ça que je choisis.

Questions connexes