从字符串中准备Xml

时间:2017-01-31 16:13:45

标签: c# .net xml dictionary

我的项目中有一本词典

IDictionary dict<string,string>

此词典的键有xml数据(完整)。我想将所有这些合并到一个xml文件中并将其存储在另一个字典中

 dict<xmldata1,null>
 dict<xmldata2,null> 

依旧我希望拥有     dict<xml1+xml2+....,null>  并且生成的xml应该是可解析的。

我在c#.net framework中编码

3 个答案:

答案 0 :(得分:-1)

如果我理解正确,您正在寻找合并xml文档的方法。 这可以通过XDocument

来实现
var mergedXml = XDocument.Parse(xml1_string);
mergedXml.Root.Add(XDocument.Parse(xml2_string).Root.Elements());

以同样的方式继续你们其余的人。

最后取mergedDocument.ToString()并将其添加为新密钥。

答案 1 :(得分:-1)

首先,我会合并XML。因此,假设所有XML共享一个公共根元素,您可以使用下一个方法来合并它们:

private XmlDocument mergeXML(XmlDocument xmlDoc1, XmlDocument xmlDoc2)
{
     foreach (XmlNode node in xmlDoc2.DocumentElement.ChildNodes)
     {
         XmlNode imported = xmlDoc1.ImportNode(node, true);
         xmlDoc1.DocumentElement.AppendChild(imported);
     }
     return xmlDoc1;
 }

然后,您可以使用OutterXML属性获取结果XML的字符串内容,如下所示:

XmlDocument xmlDoc1 = new XmlDocument();
XmlDocument xmlDoc2 = new XmlDocument();

xmlDoc1.LoadXml("<?xml version='1.0'?><field><subfield1>hi</subfield1></field>");
xmlDoc2.LoadXml("<?xml version='1.0'?><field><subfield2>hello</subfield2></field>");

XmlDocument mergedXML = mergeXML(xmlDoc1, xmlDoc2);

Dictionary<string, string> XMLDictionary = new Dictionary<string, string> {
                {mergedXML.OuterXml, "whatever" }
            };

当然,结果字符串可再次解析为XMLDocument,您可以使用linQ检查它以访问密钥:

XmlDocument resultXML = new XmlDocument();
resultXML.LoadXml(XMLDictionary.Keys.ElementAt(0));

答案 2 :(得分:-1)

使用xml linq:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            IDictionary<string,string> dict = new Dictionary<string,string>() {
                {"subfield", "hi"},
                {"subfield2", "Hello"}
            };

            string header = "<?xml version=\"1.0\"?><field></field>";
            XDocument doc = XDocument.Parse(header);
            XElement field = (XElement)doc.FirstNode;

            foreach(string key in dict.Keys)
            {
                field.Add(new XElement(key, dict[key]));
            }

        }
    }
}