将 XML 解析为数据库

本文关键字:数据库 XML | 更新日期: 2023-09-27 18:37:14

我正在解析来自Web的XML文件并将元素保存到我的数据库中。所有变量都是字符串类型,以便于操作。我可以保存 5 个字段中的 7 个。当我尝试解析所有 7 条记录时,我只得到 80 条记录,如果我评论不起作用的 2 行,我会得到 17000 条记录。有谁知道为什么它停在 89 条记录?

这是代码:

var xml = new XmlDocument();
xml.Load("http://www.systembolaget.se/Assortment.aspx?Format=Xml");
XmlNodeList documentNodeList = xml.DocumentElement.SelectNodes("/artiklar/artikel");
IList<Systembolaget> whiskies = new List<Systembolaget>();
if (documentNodeList.Count > 0)
{
    foreach (XmlNode row in documentNodeList)
    {
        Systembolaget sb = new Systembolaget();
        sb.ArtikelId = (string)row.SelectSingleNode("Artikelid").InnerText;
        sb.SaljStart = (string)row.SelectSingleNode("Saljstart").InnerText;
        sb.Ursprunglandnamn = (string)row.SelectSingleNode("Ursprunglandnamn").InnerText;
        sb.VaruNamn = (string)row.SelectSingleNode("Namn").InnerText + " " + row.SelectSingleNode("Namn2").InnerText;
        //sb.Argang = (string)row.SelectSingleNode("Argang").InnerText;
        sb.Alkoholhalt = (string)row.SelectSingleNode("Alkoholhalt").InnerText;
        sb.Volym = (string)row.SelectSingleNode("Volymiml").InnerText;
        sb.Pris = (string)row.SelectSingleNode("Prisinklmoms").InnerText;
        /*
        if (row.SelectSingleNode("Varugrupp").InnerText.StartsWith("Whisky"))
        {
            var rowVarugrupp = (string)row.SelectSingleNode("Varugrupp").InnerText;
            sb.Varugrupp = rowVarugrupp;
        }*/
        whiskies.Add(sb);
        ISystembolagetRepository sbDao = daoFactory.GetSystembolagetRepository();
        sbDao.SaveOrUpdate(sb);

将 XML 解析为数据库

如果您通过注释掉该 IF 块获得 80 条记录,则意味着您在 xml 中的第 81 条记录是违规记录。最有可能的是,名为"Varugrupp"的xml节点不存在,或者您在xpath中拼写错误。还要记住 xpath 区分大小写。以下语句可能会产生空值,因此可能会引发异常。

row.SelectSingleNode("Varugrupp")

您可以通过更改 if 条件来绕过它,如下所示

if (row.SelectSingleNode("Varugrupp")!=null && row.SelectSingleNode("Varugrupp").InnerText.StartsWith("Whisky"))
{
   var rowVarugrupp = (string)row.SelectSingleNode("Varugrupp").InnerText;
   sb.Varugrupp = rowVarugrupp;
}
<Varugrupp>在第

81条记录中缺失。 您是否尝试过使用 Linq to Xml 来读取 XML? 我认为使用起来更容易一些:

        XDocument document = XDocument.Load("http://www.systembolaget.se/Assortment.aspx?Format=Xml");
        List<Systembolaget> whiskies = new List<Systembolaget>();
        foreach(XElement element in document.Element("artiklar").Elements("artikel"))
        {
            Systembolaget sb = new Systembolaget();
            sb.ArtikelId = element.Element("Artikelid").Value;
            sb.SaljStart = element.Element("Saljstart").Value;
            sb.Ursprunglandnamn = element.Element("Ursprunglandnamn").Value;
            sb.VaruNamn = element.Element("Namn").Value + element.Element("Namn2").Value;
            sb.Argang = element.Element("Argang").Value;
            sb.Alkoholhalt = element.Element("Alkoholhalt").Value;
            sb.Volym = element.Element("Volymiml").Value;
            sb.Pris = element.Element("Prisinklmoms").Value;
            if (element.Element("Varugrupp") != null && element.Element("Varugrupp").Value.StartsWith("Whisky"))
            {
                sb.Varugrupp = element.Element("Varugrupp").Value;
            }
            whiskies.Add(sb);
        }