.net - 如何在 MongoDB 中存储 XML?

标签 .net json xml mongodb bson

上下文:现有系统主要基于以各种形式(XmlDocument、XDocument/XElement、字符串编码)传递 XML。我们正在开发一个新组件,它将与现有系统对话,并将拥有自己的某种数据存储,用于保存 XML 供以后处理。 MongoDB 似乎非常适合数据存储,但它本身不支持 XML,所以我想知道在 MongoDB 中处理 XML 有哪些好的选择。

我想到了两个选项:

<强>1。使用 XML 到 JSON 转换器(用于双向转换)

我相信这将允许查询数据和在 MongoDB 索引上创建。没有立即需要做很多查询或很多不同类型的查询,但我们至少必须做一些基于键的检索,也许对值的一两个查询是有用的(当然对保持该选项打开)。

通用的 XML-2-JSON 转换器是否适合这里,还是 MongoDB/BSON 转换器更好?

转换为 JSON/BSON 有什么特别的缺点吗?它会不会导致信息丢失,也许元素空间 block 中的空白可能会被破坏?

<强>2。字符串(或二进制)对 XML 进行编码并将其存储为 BSON 字节数组。

优点

  • 简单。

缺点

  • 数据变得对查询不透明。

上述两个选项是否还有其他优点/缺点? 还有其他选择吗? 这是理智吗?! (例如,是否有比 MongoDB 更适合这个问题的方法?)

===更新===

使用 Newtonsoft.Json 进行 XML 到 JSON 转换的工作演示...

XElement fooElem = XElement.Load("foo.xml");
// Note. I used Formatting.Indented to make the JSON easily readable for debug purposes, otherwise it just adds unnecessary whitespace characters.
string jsonStr = JsonConvert.SerializeXNode(fooElem, Formatting.Indented);
BsonDocument bsonDoc = BsonDocument.Parse(jsonStr);

从那里你可以像往常一样调用 MongoDB,例如:

await collection.InsertOneAsync(bsonDoc);

在我的特定情况下,这可能是一个 OK/可接受的解决方案,但更普遍的是,它具有转换为然后解析 JSON 字符串的开销,这是不必要的工作。理想情况下,我们将从 XElement 直接转到 BsonDocument。

最佳答案

你说得很对。避免在将 JSON 持久化到 MongoDB 之前解析 JSON,imo。您可能会发现商业 .NET 产品(库)已经解决了这个普遍问题,也可能找不到。

FWIW,您是否应该自己实现,我最近一直在考虑在 JSON 中对文档顺序友好的 XML 通用编码,我认为它是可往返的,有或没有 XML namespace ,并且可能会激发灵感你。

这是我对 this other question ("xml to json mapping challenge") 的回答中的 PoC :

https://stackoverflow.com/a/35810403/1409653

'HTH,

关于.net - 如何在 MongoDB 中存储 XML?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31411147/

相关文章:

.net - 如何以编程方式复制在 Windows 下锁定的文件或文件夹?

c# - 在显示其他表单时禁用完整表单

c# - 异常读取进程信息,通过 Process.GetProcesses(string),从 Windows 7

c# - 在 ASP.NET 上创建 JSON header

html - 在 HTML 中漂亮地打印 JSON 字符串

javascript - 如何使用 xml2js(而不是使用下划线键)访​​问 XML 元素文本?

.net - 使用 System.IO.Ports.SerialPort 类打开串行端口时出错

c# - 在使用 NJsonSchema 生成模式时如何将 AllowAdditionalProperties 设置为 true

sql - 使用 XML FOR 向 T-SQL 查询添加命名空间

xml - 是否可以仅在一个 XSD 文件中展平 XML 模式包?