gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 09:15:11 25 4
gpt4 key购买 nike

上下文:现有系统主要基于以各种形式(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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com