我需要解析大型 XML 文件并将数据保存到 MS SQL 数据库表中。显然是一种编写 C# 程序的方法。显然,这提出了性能问题。您知道处理大规模 XML 的最快、最有效的方法吗?
最佳答案
如果您想寻求 C# 解决方案,请查看 XmlReader
。这将为您提供对 XML 文件的仅转发流式访问。注意前向部分。如果您需要对子节点进行更复杂的操作,您最好结合使用 XmlReader
和 XDocument
,即使用 加载大文件>XmlReader
,然后使用 ReadSubtree()
将子树加载到 XDocuments 中。例如,如果您的文档是这样的:
<root>
<big-child-1>
<grandchild-a>
...
</grandchild-a>
<grandchild-b>
...
</grandchild-b>
</big-child-1>
<big-child-2>
...
</big-child-2>
</root>
你可能会这样做:
XmlReader xr = XmlReader.Create("C:\\file.xml");\
xr.MoveToContent();
while (xr.Read())
{
if (xr.Name == "grandchild-a")
{
XDocument xd = new XDocument(xr.ReadSubTree()); // now you have an XDocument with all the content under the grandchild-a node
}
else if (xr.Name == ...)
}
但是,仅使用 XmlReader
的次数越多,它的性能就越高。
这是一些文档:
- XmlReader:https://msdn.microsoft.com/en-us/library/system.xml.xmlreader%28v=vs.110%29.aspx
- X文档:https://msdn.microsoft.com/en-us/library/system.xml.linq.xdocument%28v=vs.110%29.aspx
当然你还有其他选择:
- SQL Server 具有 XML 功能(查看
OPENXML
) - SSIS:您在这里提到了对内存使用的担忧,但这是一个选项。
- XSLT:在这种情况下,可能不如使用
XmlReader
好,但您可以创建 XSLT,然后从您的 XML 创建 SQL 查询。
关于c# - 高效解析大型 XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29951809/