C#无法从对象列表中获取值

时间:2015-04-28 13:42:01

标签: c# xml xmldocument

我的主程序类调用StronyElementuStrukt过程

List<object> monthlyPages = new List<object>();
monthlyPages =  StronyElementuStrukt(loginGuid, "8B35134E10A8432DB1A8C06A58427988");

这是一个过程 - 一个构建xml节点列表并将其返回给主Program类的方法:

public static List<object> StronyElementuStrukt(string LoginGUID, string LinkGUID)
{
    List<object> listPages = new List<object>();

    XmlDocument document = new XmlDocument(); // tworzenie nowego obiektu - dokument xml z odpowiedzia serwera
    document.LoadXml(response.Result); //wczytywanie xmla z odpowiedzia serwera do obiektu
    XmlNode pageNode = document.SelectSingleNode("/IODATA/PAGES/PAGE"); //deklaracja noda xmlowego

    if (pageNode != null) //jeżeli PAGE node istnieje
    {
        XmlNodeList nodeList = document.SelectNodes("//PAGE");

        foreach (XmlNode node in nodeList)
        {
            listPages.Add(node);
        }
        return listPages;
    }
}

在主程序类中,我需要获取xml id属性的值,我试图这样做:

foreach (object monthlyPage in monthlyPages)
{
    Console.WriteLine(monthlyPage.Attributes["id"].Value);
}

问题在于,当我尝试获取id时,我收到以下错误:

  

错误6'object'不包含'Attributes'的定义,不包含   扩展方法'Attributes'接受类型的第一个参数   可以找到'对象'(你是否错过了使用指令或者   装配参考?)

你能告诉我如何在foreach循环中找到xml属性吗?请问一些事情是否不够清楚。

2 个答案:

答案 0 :(得分:3)

更改方法以返回List<XmlNode>

public static List<XmlNode> StronyElementuStrukt(string LoginGUID, string LinkGUID)
{
    List<XmlNode> listPages = new List<object>();

    XmlDocument document = new XmlDocument(); // tworzenie nowego obiektu - dokument xml z odpowiedzia serwera
    document.LoadXml(response.Result); //wczytywanie xmla z odpowiedzia serwera do obiektu
    XmlNode pageNode = document.SelectSingleNode("/IODATA/PAGES/PAGE"); //deklaracja noda xmlowego

    if (pageNode != null) //jeżeli PAGE node istnieje
    {
        XmlNodeList nodeList = document.SelectNodes("//PAGE");

        foreach (XmlNode node in nodeList)
        {
            listPages.Add(node);
        }
    }

    return listPages;
}

然后这将有效。

List<XmlNode> monthlyPages = StronyElementuStrukt(
    loginGuid, 
    "8B35134E10A8432DB1A8C06A58427988");

foreach (XmlNode monthlyPage in monthlyPages)
{
    Console.WriteLine(monthlyPage.Attributes["id"].Value);
}

请注意,您只需更改foreach即可将monthlyPage声明为XmlNode而不是object,它会为您执行投射。但最好是特定于你在通用集合中使用的类型。

答案 1 :(得分:0)

我将所有出现从List<object>更改为List<XmlNode>。所以代码现在看起来像这样: 主程序:

List<XmlNode> monthlyPages = new List<XmlNode>();
monthlyPages =  StronyElementuStrukt(loginGuid, "8B35134E10A8432DB1A8C06A58427988");
foreach (XmlNodemonthlyPage in monthlyPages)
{
    Console.WriteLine(monthlyPage.Attributes["id"].Value);
}

步骤:

    public static List<XmlNode> StronyElementuStrukt(string LoginGUID, string LinkGUID)
{
        List<XmlNode> listPages = new List<XmlNode>();

        XmlDocument document = new XmlDocument(); // tworzenie nowego obiektu - dokument xml z odpowiedzia serwera
        document.LoadXml(response.Result); //wczytywanie xmla z odpowiedzia serwera do obiektu
        XmlNode pageNode = document.SelectSingleNode("/IODATA/PAGES/PAGE"); //deklaracja noda xmlowego

        if (pageNode != null) //jeżeli PAGE node istnieje
        {
            XmlNodeList nodeList = document.SelectNodes("//PAGE");

            foreach (XmlNode node in nodeList)
            {
                listPages.Add(node);
            }
            return listPages;
        }
    }