2012-09-03 4 views
3

espaces de noms, je suis en train d'ajouter plusieurs revendications à l'élément ClaimTypesOffered comme indiqué ci-dessous:Génération XML

<fed:ClaimTypesOffered> 
    <auth:ClaimType Uri="http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name" Optional="true" xmlns:auth="http://docs.oasis-open.org/wsfed/authorization/200706"> 
    <auth:DisplayName>Name</auth:DisplayName> 
    <auth:Description>The name of the subject.</auth:Description> 
    </auth:ClaimType> 
</fed:ClaimTypesOffered> 

Il y a beaucoup de magie namespace passe là-bas et je suis en train de me frayer un chemin à travers elle. Juste obtenir le bon nom d'élément a été difficile. J'ai essayé tous les éléments suivants:

new XElement(XNamespace.Get("auth") + "ClaimType", "somedata"); 

donne

<ClaimType xmlns="auth">somedata</ClaimType> 

et

new XElement(XName.Get("{http://docs.oasis-open.org/wsfed/authorization/200706}auth"), "somedata"); 

donne

<auth xmlns="http://docs.oasis-open.org/wsfed/authorization/200706">somedata</auth> 

et

new XElement("auth:ClaimType", "somedata"); 

donne

System.Xml.XmlException : The ':' character, hexadecimal value 0x3A, cannot be included in a name. 

Je suis à la recherche de l'aide obtenir cette plus loin, un exemple complet de génération de la demande, y compris les attributs et éléments intérieurs serait génial, même une petite poussée dans la bonne direction serait appréciée.

+0

Essayez une recherche sur [donc] pour [ '[xml-namespaces] [LINQ-to-xml]'] (http://stackoverflow.com/questions/tagged/xml-namespaces+linq-to -xml) –

+0

http://stackoverflow.com/questions/6747304/in-c-is-there-a-way-to-generate-an-xdocument-using-the-short-prefix-instead-of –

+0

@JohnSaunders Publier cela implique qu'il existe des réponses aux questions similaires aux miennes. J'ai cherché des réponses existantes et trouvé très peu lié à la génération de XML avec des espaces de noms. Pour moi, cette réponse est essentiellement équivalente à "google it". – jjr2527

Répondre

0

La clé définit l'espace de noms sur l'élément parent, puis les éléments enfants peuvent utiliser cet espace de noms. Sans le nouveau XAttribute (XNamespace.Xmlns + "auth", auth.NamespaceName) l'espace de noms est défini dans les autres manières comme vu dans la question d'origine.

 XNamespace fed = "http://docs.oasis-open.org/wsfed/federation/200706"; 
     XNamespace auth = "http://docs.oasis-open.org/wsfed/authorization/200706"; 

     XElement root = new XElement(auth + "ClaimType", 
      new XAttribute(XNamespace.Xmlns + "auth", auth.NamespaceName), 
      new XAttribute("Uri", "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name"), 
      new XAttribute("Optional", "true"), 
      new XElement(auth+"DisplayName", "EmployeeID"), 
      new XElement(auth+"Description", "The employee's designated ID number.") 
     ); 

     Console.WriteLine(root);