2017-01-17 12 views
0

は、私は、サイトマップを生成するために、MVCコントローラでそれを使用し、C#でビルドXMLサイトマップのためのクラスを持っている:私はそれを使用する場合マップ画像要素

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; } 

    } 

これは、出力されます。

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

しかし、私はこのように、正しい形式をしたい:

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

iがより、画像要素に をこのプレフィックスを追加しますあなたの助けにks

答えて

0

このページを読むhttps://msdn.microsoft.com/tr-tr/library/system.xml.serialization.xmlnamespacedeclarationsattribute(v=vs.110).aspx
良い例があります。
ImageクラスにXmlSerializerNamespaces typeプロパティを追加し、文字列プレフィックスと文字列の名前空間値を追加する必要があります。

これは私が読んだXML Serialization and namespace prefixesです。

[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; } 

} 

以下のように使用する必要があります。

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

おかげで多くのことを、あなたはこのクラスのために、このプロパティの正しい形式を書き込むことができ、してください? – hosein

0

私はこのようにそれを追加します。

[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; } 
     } 

    } 

と、これが出力されます:

<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> 
関連する問題