C# 在c中从列表创建xml文档

C# 在c中从列表创建xml文档,c#,xml,xmldocument,C#,Xml,Xmldocument,我有一个包含不同fetch XML的字符串列表fetchXmlList。我想使用此列表创建xml文档 Xml文档看起来像: <mappings> <main_fetchxml> fetchXmlList[0] </main_fetchxml> <relatedqueries> fetchXmlList[1] fetchXmlList[2] . . . </r

我有一个包含不同fetch XML的字符串列表fetchXmlList。我想使用此列表创建xml文档

Xml文档看起来像:

<mappings>
 <main_fetchxml>
    fetchXmlList[0]
 </main_fetchxml>
 <relatedqueries>
    fetchXmlList[1]
    fetchXmlList[2]
         .
         .
         .
 </relatedqueries>
</mappings>

但将列表项追加到XmlElement对象不允许。还有别的办法吗


任何帮助都将不胜感激。提前感谢。

1您必须有根元素

2.试试这个代码

public static string Fetch2Xml(string s)
{      
    return HttpUtility.HtmlDecode(s);
}

private static void Main(string[] args)
{
    String s = "&lt;fetch distinct=\"false\" no-lock=\"false\" mapping=\"logical\" /&gt;";

    String[] sa = new string[] { s, s, s, s, s, s, s };

    XmlDocument doc = new XmlDocument();

    XmlElement someRoot = doc.CreateElement("mappings");

    XmlElement ele = doc.CreateElement("main_fetchxml");
    ele.InnerXml = Fetch2Xml(sa[0]);
    someRoot.AppendChild(ele);

    XmlElement ele2 = doc.CreateElement("relatedqueries");

    for (int a = 1; a < sa.Length; ++a)
    {
        ele2.InnerXml += Fetch2Xml(sa[a]);
    }

    someRoot.AppendChild(ele2);
    doc.AppendChild(someRoot);

    doc.Save(@"c:\temp\bla.xml");
}
这也将导致:

<mappings>
  <main_fetchxml>
    <fetch distinct="false" no-lock="false" mapping="logical" />
  </main_fetchxml>
  <relatedqueries>
    <fetch distinct="false" no-lock="false" mapping="logical" />
    <fetch distinct="false" no-lock="false" mapping="logical" />
    <fetch distinct="false" no-lock="false" mapping="logical" />
    <fetch distinct="false" no-lock="false" mapping="logical" />
    <fetch distinct="false" no-lock="false" mapping="logical" />
    <fetch distinct="false" no-lock="false" mapping="logical" />
  </relatedqueries>
</mappings>
您可以使用以下选项:

public static void SerializeObject(this List<string> list, string fileName)
    {
        var serializer = new XmlSerializer(typeof(List<string>));
        using (var stream = File.OpenWrite(fileName))
        {
            serializer.Serialize(stream, list);
        }
    }

    public static void Deserialize(this List<string> list, string fileName)
    {
        var serializer = new XmlSerializer(typeof(List<string>));
        using (var stream = File.OpenRead(fileName))
        {
            var other = (List<string>)(serializer.Deserialize(stream));
            list.Clear();
            list.AddRange(other);
        }
    }

到目前为止,您编写了哪些代码?是否可以编辑原始问题以包含代码示例?在注释中阅读代码非常困难。您必须使用XmlDocument吗?如果您可以使用LINQ到XML,这将变得微不足道。。。虽然我会质疑您在一个元素中使用多个值,比如在文本节点中使用换行符……但将列表项附加到XmlElement对象不允许。你这是什么意思?你收到错误了吗?编译时间还是执行时间?请澄清。您需要一个根元素,不可能有两个xml根元素,您可以使用字符串生成器^^^,因为fetchXmlList包含FetchXml,上述代码无法正确添加xml标记。例如:fetch distinct=false no lock=false mapping=logical另外,所有列表项都应该正确格式化并形成格式化的xml文档。请在上一个答案中将InnerText更改为InnerXml。这对我很管用。谢谢。您将需要fetch2xml,否则您将获得:fetch distinct=false no lock=false mapping=logical/fetch distinct=false no lock=false mapping=logical/fetch distinct=false no lock=false mapping=logical/fetch distinct=false no lock=false mapping=logical/fetch distinct=false无锁=错误映射=逻辑/
public static void SerializeObject(this List<string> list, string fileName)
    {
        var serializer = new XmlSerializer(typeof(List<string>));
        using (var stream = File.OpenWrite(fileName))
        {
            serializer.Serialize(stream, list);
        }
    }

    public static void Deserialize(this List<string> list, string fileName)
    {
        var serializer = new XmlSerializer(typeof(List<string>));
        using (var stream = File.OpenRead(fileName))
        {
            var other = (List<string>)(serializer.Deserialize(stream));
            list.Clear();
            list.AddRange(other);
        }
    }