在C#中创建xml

时间:2018-01-25 12:17:49

标签: c# xml

我想要最终的xml如下......

<Programs>
  <Program><id>4</id><isRead>true</isRead><isWrite>false</isWrite></Program>
  <Program><id>8</id><isRead>true</isRead><isWrite>true</isWrite></Program>
</programs>

现在以下是编写的代码

XmlDocument xmlDoc = new XmlDocument();
XmlNode rootNode = xmlDoc.CreateNode(XmlNodeType.Element,"programs",null);
xmlDoc.AppendChild(rootNode);


foreach (dynamic item in access)
{
  XmlNode myXmlNode = JsonConvert.DeserializeXmlNode(item.ToString(), "program");
  rootNode.AppendChild(myXmlNode); //error
}

在myXmlNode.InnerXml中,我已经开始关注

<Program><id>4</id><isRead>true</isRead><isWrite>false</isWrite></Program>

因此,为所有孩子运行循环以添加父项。但是我收到错误的行//错误,如上所示。错误是:

  

指定的节点不能作为此节点的有效子节点插入,   因为指定的节点类型错误。

3 个答案:

答案 0 :(得分:2)

您正在尝试插入不同类型的xml节点。您可以使用ImportNode来应用它。

foreach (dynamic item in access)
{
    XmlNode myXmlNode = JsonConvert.DeserializeXmlNode(item.ToString(), "program");
    rootNode.AppendChild(rootNode.OwnerDocument.ImportNode(myXmlNode.FirstChild,true));
}

答案 1 :(得分:2)

我建议您为要在XML中创建的内容创建一个模型,然后将模型列表序列化为XML。

原因是你最终会得到更易于维护的东西。

你的模型会是这样的:

public class Program
{
    public int Id { get; set; }
    public bool IsRead { get; set; }
    public bool IsWrite { get; set; }
}

您可以按照以下文章序列化它:

https://support.microsoft.com/en-gb/help/815813/how-to-serialize-an-object-to-xml-by-using-visual-c

答案 2 :(得分:0)

我自己使用过XmlSerializer库几次。

public class Program
{
    public int Id { get; set; }
    public bool IsRead { get; set; }
    public bool IsWrite { get; set; }
}

public class XmlTemplate
{
    public List<Program> Programs { get; set; }
}

class MainProgram
{
    static void Main(string[] args)
    {
        var xmlTemplate = new XmlTemplate();
        xmlTemplate.Programs = new List<Program>();
        xmlTemplate.Programs.Add(new Program() { Id = 123, IsRead = true, IsWrite = false });
        xmlTemplate.Programs.Add(new Program() { Id = 456, IsRead = false, IsWrite = true });

        var serializer = new XmlSerializer(typeof(XmlTemplate));
        var stream = new StringWriter();

        serializer.Serialize(stream, xmlTemplate);

        Console.WriteLine(stream.ToString());
        Console.ReadKey();

    }
}

以下列格式输出XML:

<XmlTemplate xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <Programs>
    <Program>
      <Id>123</Id>
      <IsRead>true</IsRead>
      <IsWrite>false</IsWrite>
    </Program>
    <Program>
      <Id>456</Id>
      <IsRead>false</IsRead>
      <IsWrite>true</IsWrite>
    </Program>
  </Programs>
</XmlTemplate>