2010-10-01 26 views
1

Je suis en train de construire un document XML en utilisant l'espace de noms GML et XML LINQ.Problème création d'un objet XElement avec espace de noms GML

Mon but est un XElement avec un contenu comme celui-ci:

<gml:name>...</gml:name> 

Mais je reçois les suivantes:

<name xmlns="http://www.opengis.net/gml" /> 

Le problème est que le gml: manque de l'élément. Pourquoi donc?


Mon code est le suivant:

XNamespace nsGML = "http://www.opengis.net/gml"; 
XElement item = new XElement(nsGML + "name"); 

Répondre

3

tout d'abord ce XML

<name xmlns="http://www.opengis.net/gml" /> 

est équivalent à ce XML

<gml:name xmlns:gml="http://opengis.net/gml" /> 

Et tous les consommateurs XML devrait traiter c'est pareil. Cela dit, vous pouvez obtenir la deuxième sortie comme ceci:

XNamespace nsGML = "http://www.opengis.net/gml"; 
XElement item = new XElement(nsGML + "name", 
        new XAttribute(XNamespace.Xmlns + "gml", nsGML.NamespaceName)); 

Si vous ne spécifiez pas l'attribut déclaration d'espace de noms XML LINQ à choisir un préfixe automatiquement pour vous (dans ce cas, il utilise une vide). Si vous souhaitez forcer l'utilisation d'un préfixe spécifique, vous devez fournir l'attribut de déclaration d'espace de noms.

+0

** Vitek **: Merci pour votre réponse rapide. L'équivalence que j'ai conclue, mais je veux aussi l'apparence visuelle - et votre suggestion fonctionne comme un charme :) – Chau