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

本文关键字:编写 设置 子节点 xml 何使用 cdata | 更新日期: 2023-09-27 18:33:11

>我尝试生成如下所示的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,就像第一个示例中的流派子节点一样?

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

我认为您应该使用正确的注释来解决元素名称称为"字符串"而不是"名称"的问题,如使用属性控制XML序列化中所述。

你必须稍微修改一下你的类(我不确定你能得到名称的CDATA,但它应该没问题):

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