J'ai une classe pour construire un plan de site xml en c #, je l'utilise dans un contrôleur mvc pour générer un plan de site:

public class Location
    {
        public enum eChangeFrequency
        {
            always,
            hourly,
            daily,
            weekly,
            monthly,
            yearly,
            never
        }

        [XmlElement("loc")]
        public string Url { get; set; }

        [XmlElement("changefreq")]
        public eChangeFrequency? ChangeFrequency { get; set; }
        public bool ShouldSerializeChangeFrequency() { return ChangeFrequency.HasValue; }

        [XmlElement("lastmod")]
        public DateTime? LastModified { get; set; }
        public bool ShouldSerializeLastModified() { return LastModified.HasValue; }

        [XmlElement("priority")]
        public double? Priority { get; set; }
        public bool ShouldSerializePriority() { return Priority.HasValue; }

        [XmlElement("image")]
        public Image Image { get; set; }
    }

    [XmlType("image")]
    public class Image
    {
        [XmlElement(ElementName = "loc")]
        public string UrlLocation { get; set; }

        [XmlElement(ElementName = "caption")]
        public string Caption { get; set; }

        [XmlElement(ElementName = "title")]
        public string Title { get; set; }

    }

C'est la sortie, quand je l'utilise:

<url>
  <loc>http://...</loc>
  <priority>0.5</priority>
    <image>
      <loc>http://...</loc>
    </image>
</url>

Mais je veux un format correct, comme ceci:

<url>
  <loc>http://...</loc>
  <priority>0.5</priority>
  <image:image>
    <image:loc>http://...</image:loc>
  </image:image>
</url>

Je veux ajouter ce préfixe à l'élément d'image, merci pour votre aide

0
hosein 17 janv. 2017 à 08:24

2 réponses

Meilleure réponse

Lisez cette page https: //msdn.microsoft.com/tr-tr/library/system.xml.serialization.xmlnamespacedeclarationsattribute(v=vs.110).aspx
Il y a un bon exemple.
Vous devez ajouter la propriété de type XmlSerializerNamespaces dans votre classe Image et vous devez ajouter un préfixe de chaîne et des valeurs d'espace de noms de chaîne.

J'ai lu ce Sérialisation XML et préfixes d'espace de noms.

[XmlType("image", Namespace = "http://flibble")]
public class Image
{
    [XmlElement(ElementName = "loc")]
    public string UrlLocation { get; set; }

    [XmlElement(ElementName = "caption")]        
    public string Caption { get; set; }

    [XmlElement(ElementName = "title")]
    public string Title { get; set; }

}  

L'utilisation doit être comme ci-dessous.

Image mySelect = new Image();
        mySelect.Caption = "Caption";
        mySelect.Title = "Title";
        mySelect.UrlLocation = "www";

        XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
        ns.Add("image", "http://flibble");
        XmlSerializer ser = new XmlSerializer(typeof(Image));

        ser.Serialize(Console.Out, mySelect,ns);
0
Community 23 mai 2017 à 11:45

Je l'ajoute comme ceci:

[XmlType("image")]
    public class Image
    {
        [XmlElement(ElementName = "loc")]
        public string UrlLocation { get; set; }

        [XmlElement(ElementName = "caption")]
        public string Caption { get; set; }

        [XmlElement(ElementName = "title")]
        public string Title { get; set; }

        [XmlNamespaceDeclarations]
        public XmlSerializerNamespaces NameSpace
        {
            get
            {
                XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
                ns.Add("image", "http://www.google.com/schemas/sitemap-image/1.1");
                return ns;
            }
            set { NameSpace = value; }
        }

    }

Et ceci est la sortie:

<url>
  <loc>http://...</loc>
  <priority>0.5</priority>
    <image xmlns:image="http://www.google.com/schemas/sitemap-image/1.1">
      <loc>http://...</loc>
    </image>
</url>
0
hosein 18 janv. 2017 à 07:18