使用LINQ读取C#XML

本文关键字:C#XML 读取 LINQ 使用 | 更新日期: 2023-09-27 17:57:45

我需要读取XML文件(大于1GB)并将数据加载到数据库中。如果我使用LINQ,读取速度会比使用XmlReader更快吗?

使用LINQ读取C#XML

XDocument(LINQ to XML)和XmlDocument用于较小的文件,它们是所谓的DOM解析器。原因是他们将完整的文档加载到内存中并对其进行解析

XmlReader是一个SAX解析器,适用于大文件,因为只读取小块,并且在读取时检查格式是否正确。

哪些文件被视为"小"answers"大"实际上取决于某些因素,比如机器中安装的内存。

一般来说,对于任何大小适中的XML文件,XmlReader应该是关于原始执行时间最快的解决方案,但它也是迄今为止最难实现和理解的API。特别是对于使用此API的新手来说,实现时间明显高于使用其他API。

    public void validateIputXML(string inputXmlPath)
    {
        XmlDocument document = new XmlDocument();
        document.Load(inputXmlPath);
        XmlNodeList recipientItem = document.GetElementsByTagName("RECIPIENT");
        foreach (XmlNode childList in recipientItem)
        {
            string attibuteValue_TemplateID = getValue(childList,".//LETTER_HEADER/TEMPLATE_ID");
            string attibuteValue_ProviderName = getValue(childList,".//LETTER_BODY/PROVIDER_INFO/PROVIDER_NAME");
            string attibuteValue_ProviderAddress = getValue(childList,".//LETTER_BODY/PROVIDER_INFO/PROVIDER_ADDRESS1");
            string attibuteValue_ProviderNumber = getValue(childList,".//LETTER_BODY/PROVIDER_INFO/PROVIDERNPI");
            Report.Info(attibuteValue_TemplateID+"-->"+attibuteValue_ProviderName+"-->"+attibuteValue_ProviderAddress+"-->"+attibuteValue_ProviderNumber);
        }
    }

    public string getValue(XmlNode Xnode, string attributeName)
    {
        XmlNode innerNode = Xnode.SelectSingleNode(attributeName);
        string attributeValue = innerNode.InnerText;
        return attributeValue;
    }