获取XML标记xith XMLReader的值并添加到LinkedList C#

获取XML标记xith XMLReader的值并添加到LinkedList C#,c#,xml,linked-list,xmlreader,C#,Xml,Linked List,Xmlreader,我是一个编程新手,有一个严重的问题,无法摆脱它 我有5个XML URL。比如 这是一个XML URL,我必须获取该URL的值并将其写入相关列中的数据库。 我的列名和XML标记名不匹配 当我编写下面的代码时,reader元素将丢失null xml值。有些标记内部没有值。我必须将它们null添加到linkedlist中,因为在该代码之后,我将遍历链接列表,但是如果ı不能为null xml值添加值,则顺序不匹配。所以列名和里面的数据不匹配。我把订单弄丢了。我的所有代码都在这里,如果有帮助的话,你也可以

我是一个编程新手,有一个严重的问题,无法摆脱它

我有5个XML URL。比如

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

当我编写下面的代码时,reader元素将丢失null xml值。有些标记内部没有值。我必须将它们null添加到linkedlist中,因为在该代码之后,我将遍历链接列表,但是如果ı不能为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();
        }
    }
public void webserviceshopmilescampaingnsxmlread(字符串URL)
{
XmlReader=XmlReader.Create(URL);
LinkedList LinkedList=新建LinkedList();
List shopmilecompaigns=新列表();
尝试
{
while(reader.Read())
{
开关(reader.NodeType)
{
案例XmlNodeType.Text:
linkedList.AddLast(reader.Value);
打破
}
}
}
捕获(XmlException异常)
{
Console.WriteLine(“XML-okurken-bir-sorun-oluştu,hata-detayı-->”+exception.Message);
}
LinkedListNode节点=linkedList.First;
while(节点!=null)
{
ShopAndMilesCampaigns shopMilesCampaign=新建ShopAndMilesCampaigns();
shopMilesCampaign.Name=node.Value;//Null值会混淆订单,因为我无法将上面的reader.read添加为Null
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;
shopmilecampaign.Add(shopMilesCampaign);
}
foreach(ShopAndMileCampaigns shopMileCampaigns在shopMileCampaigns中的shopMileCampaigns)
{
shopmilecompaign.Insert();
}
}

我找到了答案。这是让你知道的

如果XmlNodeType等于元素,则循环继续从XML数据中读取,并查找XML标记的whiteAPCES和end元素。下面的代码给出了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;
                }
            }
        }
public LinkedList AddToLinkedList(XmlReader)
{
LinkedList LinkedList=新建LinkedList();
尝试
{
while(reader.Read())
{
开关(reader.NodeType)
{
case XmlNodeType.Element:
reader.Read();
开始:
if(reader.NodeType==XmlNodeType.Whitespace | | reader.NodeType==XmlNodeType.Element)
{
reader.Read();
转到开始;
}
else if(reader.NodeType==XmlNodeType.EndElement)
{
linkedList.AddLast(“”);
}
其他的
{
linkedList.AddLast(reader.Value);
}
打破
}
}
}

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