【问题标题】:Getting the value of XML tag xith XMLReader and add to LinkedList C#获取 XML 标记 xith XMLReader 的值并添加到 LinkedList C#
【发布时间】:2010-12-05 13:59:50
【问题描述】:

我是编程新手,遇到了一个严重的问题,无法摆脱。

我有 5 个 XML URL。比如http://www.shopandmiles.com/xml/3_119_3.xml

这是一个 XML URL,我必须在相关列中获取值并写入数据库。 我的列名和 XML 标记名匹配。

当我编写下面的代码时,阅读器元素错过了 null xml 值。有些标签内部没有价值。我必须将它们添加到链接列表中,因为在该代码之后,我正在浏览链接列表,但如果我无法为 null xml 值添加值,则顺序不匹配。所以里面的列名和数据不匹配。我失去了订单。我的所有代码都在这里,如果有帮助,您还可以检查代码中的注释。谢谢大家。

public void WebServiceShopMilesCampaignsXMLRead(string URL)
    {
        XmlReader reader = XmlReader.Create(URL);
        LinkedList<string> linkedList = new LinkedList<string>();

        List<ShopAndMilesCampaigns> shopMileCampaigns = new List<ShopAndMilesCampaigns>();

        try
        {
            while (reader.Read())
            {
                switch (reader.NodeType)
                {
                    case XmlNodeType.Text:
                        linkedList.AddLast(reader.Value);
                        break;
                }
            }
        }

        catch (XmlException exception)
        {
            Console.WriteLine("XML okurken bir sorun oluştu, hata detayı --> " + exception.Message);
        }

        LinkedListNode<string> node = linkedList.First;

        while (node != null)
        {
            ShopAndMilesCampaigns shopMilesCampaign = new ShopAndMilesCampaigns();

            shopMilesCampaign.Name = node.Value; // Null values mixes up the order because i cant add as null with reader.read above
            node = node.Next;
            shopMilesCampaign.Summary = node.Value;
            node = node.Next;
            shopMilesCampaign.AccountName = node.Value;
            node = node.Next;
            shopMilesCampaign.Category = node.Value;
            node = node.Next;
            shopMilesCampaign.Sector = node.Value;
            node = node.Next;
            shopMilesCampaign.Details = node.Value;
            node = node.Next;
            shopMilesCampaign.Image = node.Value;
            node = node.Next;
            shopMilesCampaign.Status = 1;
            node = node.Next;

            shopMileCampaigns.Add(shopMilesCampaign);
        }

        foreach (ShopAndMilesCampaigns shopMileCampaign in shopMileCampaigns)
        {
            shopMileCampaign.Insert();
        }
    }

【问题讨论】:

  • 数据有多大? XmlReader 有时非常棘手;除非数据很大(在这种情况下,XML 本身可能是一个糟糕的选择),否则我更喜欢 XmlSerializer(反序列化为对象模型)或 XElement(解析为 DOM)。然后以更友好的形式使用它...
  • 数据不大。所有 URL 都有类似的数据,就像我在问题中给出的数据一样。如果没有选择,那么我会尝试这些

标签: c# xml linked-list xmlreader


【解决方案1】:

我找到了答案。在这里让你知道。

如果 XmlNodeType 等于 Element,则循环继续从 XML 数据中读取并查找 Whitesapces 和 XML 标记的 end Element。下面的代码为我提供了 XML 标记的确切值,即使它是空的。

public LinkedList<string> AddToLinkedList(XmlReader reader)
    {

        LinkedList<string> linkedList = new LinkedList<string>();

        try
        {
            while (reader.Read())
            {
                switch (reader.NodeType)
                {
                    case XmlNodeType.Element:
                        reader.Read();
                    Start:
                        if (reader.NodeType == XmlNodeType.Whitespace || reader.NodeType == XmlNodeType.Element)
                        {
                            reader.Read();
                            goto Start;
                        }
                        else if (reader.NodeType == XmlNodeType.EndElement)
                        {
                            linkedList.AddLast("");
                        }
                        else
                        {
                            linkedList.AddLast(reader.Value);
                        }
                        break;
                }
            }
        }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-11-19
    • 1970-01-01
    • 1970-01-01
    • 2014-05-04
    • 1970-01-01
    • 2013-03-15
    • 2018-06-04
    • 1970-01-01
    相关资源
    最近更新 更多