2013-09-28 42 views
0

我嘗試生成XML像下面如何寫多CDATA XML C#/套子節點

<?xml version="1.0" encoding="UTF-8"?> 
<movie> 
<title><![CDATA[Con Air]]></title> 
<plot><![CDATA[When the government puts all its rotten criminal eggs in one airborne basket, it's asking for trouble. Before you can say, "Pass the barf bag," the crooks control the plane, led by creepy Cyrus "The Virus" Grissom. Watching his every move is the just-released Cameron Poe, who'd rather reunite with his family. The action climaxes with an incredible crash sequence in Las Vegas.]]></plot> 
<tagline><![CDATA[They were deadly on the ground; Now they have wings]]></tagline> 
<year>1997</year> 
<id>tt0118880</id> 
<rating>65</rating> 
<votes>93</votes> 
<budget>75000000</budget> 
<revenue>224012234</revenue> 
<company><![CDATA[Touchstone Pictures]]></company> 
<genre> 
<name><![CDATA[Action]]></name> 
<name><![CDATA[Adventure]]></name> 
<name><![CDATA[Thriller]]></name> 
</genre> 
</movie> 

我使用C#的XmlDocument使用序列化類生成下面的XML文件

[Serializable] 
public class movie 
{ 
    public movie() 
    { 
     this.genre = new Genre(); 
    } 

    [XmlIgnore] 
    public string title { get; set; } 
    [XmlElement("title")] 
    public XmlCDataSection titleCDATA 
    { 
     get { return new XmlDocument().CreateCDataSection(title); } 
     set { title = value.Value; } 
    } 

    [XmlIgnore] 
    public string plot { get; set; } 
    [XmlElement("plot")] 
    public XmlCDataSection plotCDATA 
    { 
     get { return new XmlDocument().CreateCDataSection(plot); } 
     set { plot = value.Value; } 
    } 
    [XmlIgnore] 
    public string tagline { get; set; } 
    [XmlElement("tagline")] 
    public XmlCDataSection taglineCDATA 
    { 
     get { return new XmlDocument().CreateCDataSection(tagline); } 
     set { tagline = value.Value; } 
    } 
    public int year { get; set; } 
    public string id { get; set; } 
    public int rating { get; set; } 
    public int votes { get; set; } 
    public long budget { get; set; } 
    public long revenue { get; set; } 

    [XmlIgnore] 
    public string company { get; set; } 
    [XmlElement("company")] 
    public XmlCDataSection companyCDATA 
    { 
     get { return new XmlDocument().CreateCDataSection(company); } 
     set { company = value.Value; } 
    } 

    [XmlElement("genre")] 
    public Genre genre { get; set; } 


} 

public class Genre 
{ 
    public Genre() 
    { 
    } 

    public string[] name { get; set; } 
} 

但輸出不如預期如下

<?xml version="1.0" encoding="utf-16"?> 
<movie> 
<title><![CDATA[Monster House]]></title> 
<plot><![CDATA[Monsters under the bed are scary enough, but what happens when an entire house is out to get you? Three teens aim to find out when they go up against a decrepit neighboring home and unlock its frightening secrets.]]></plot> 
<tagline><![CDATA[The House is . . . ALIVE!]]></tagline> 
<year>2006</year> 
<id>tt0385880</id> 
<rating>57</rating> 
<votes>74</votes> 
<budget>0</budget> 
<revenue>0</revenue> 
<company><![CDATA[Sony Pictures Entertainment]]></company> 
<genre> 
<name> 
<string>Adventure</string> 
<string>Animation</string> 
<string>Comedy</string> 
<string>Fantasy</string> 
<string>Mystery</string> 
<string>Science Fiction</string> 
<string>Family</string> 
</name> 
</genre> 
</movie> 

如何創建子節點xml像流派子節點在第一個ex充足?

回答

0

我認爲你的問題的元素名稱叫做「string」而不是「name」,應該用Controlling XML Serialization Using Attributes中的適當註釋來解決。

你必須修改你的類了一下(我不知道你能得到CDATA的名字,但它應該是罰款):

public class Movie 
{ 
    .... 
    [XmlArray("genre")] 
    [XmlArrayItem("Name")] 
    public string[] Genre { get; set; } 
} 
+0

您好,感謝您的答覆,我還將字符串[]類型更改爲XmlCDataSection [],以便像第一個示例那樣在CDATA中輸出XmlArrayItem。 這裏是代碼:

public class Movie { .... [XmlArray("genre")] [XmlArrayItem("Name")] public XmlCDataSection[] Genre { get; set; } }
Surya

+0

嗨,感謝您的答覆,並且我還將字符串[]類型更改爲XmlCDataSection [],以便CDATA中的XmlArrayItem的輸出與第一個示例類似。
這裏是代碼: ' 公共類電影 { .... [XmlArray( 「流派」) [XmlArrayItem( 「名稱」)] 公共XmlCDataSection [] {體裁獲得;組; } } ' – Surya