繁体   English   中英

如何使用多个cdata xml编写/设置子节点C#

[英]How to write/set sub-node with multiple cdata xml c#

我尝试产生如下的XML

<?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(如genre子节点)?

我认为您应该通过使用使用属性控制XML序列化中所述的适当注释来解决元素名称为“ string”而不是“ name”的问题。

您必须对类进行一些修改(并且我不确定您是否可以获取CDATA作为名称,但这应该没问题):

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM