【问题标题】:Preparing Xml from strings [closed]从字符串准备 Xml [关闭]
【发布时间】:2017-06-17 03:57:07
【问题描述】:

我的项目中有一本字典

IDictionary dict<string,string>

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

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

等等我想拥有 dict&lt;xml1+xml2+....,null&gt; 并且生成的 xml 应该是可解析的。

我在 c# .net 框架中编码

【问题讨论】:

  • 那么,你想把xml数据拼接成一个字符串吗?
  • 好的,你的问题是什么?你试过什么?为什么要将 XML 作为 key 存储在字典中?
  • @DanielMarín 是的,我想连接,但生成的 xml 应该是可解析的。
  • @tnw 我的字典包含四个键,键内的数据是 xml 元素。每个键单独是一个可解析的 xml 文件。我想将所有这些连接或附加到另一个字典的单个键中,并且我希望该键是可解析的。
  • 这并不能回答我的任何问题。请重新阅读我的评论。

标签: c# .net xml dictionary


【解决方案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));

【讨论】:

  • 哇,为什么要对所有答案投反对票?
  • Marin 感谢您的完美解决方案,我解决了我的问题。关于那次投票,我不知道这是怎么发生的,我是这个论坛的新手,可能是我做错了,我对此感到抱歉。
  • 很高兴你成功了。欢迎使用 StackOverflow。
【解决方案2】:

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

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

以同样的方式继续处理其余的 xml。

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

【讨论】:

  • 感谢他们的 winegarten 我会尝试这个解决方案并告诉你。
【解决方案3】:

使用 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]));
            }

        }
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-17
    • 2023-03-27
    • 2013-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多