读取XML NodeList

时间:2016-11-01 15:48:10

标签: c# xml

我正在尝试从REST调用解析XML响应。我可以使用我的流阅读器读取XML,但是当我尝试选择第一个节点时,它什么都没有带来。这是我的XML:

<?xml version="1.0" encoding="UTF-8" standalone="true"?>    
<slot_meta_data xmlns:ns2="http://www.w3.org/2005/Atom">    
    <product id="MDP">    
        <name>MDP</name>    
    </product>        
    <product id="CTxP">    
        <name>CTxP</name>    
    </product>       
    <product id="STR">    
        <name>STR</name>    
    </product>      
    <product id="ApP">    
        <name>ApP</name>   
        <slot>    
            <agent_id>-1111</agent_id>    
            <agent_name>ApP</agent_name>    
            <index_id>-1</index_id>         
            <alias>App Alias</slot_alias>     
        </slot>    
    </product>        
    <product id="TxP">    
        <name>TxP</name>        
        <slot>    
            <agent_id>2222</agent_id>    
            <agent_name>App2</agent_name>    
            <index_id>-1</index_id>    
            <alias>App2 Alias</slot_alias>      
        </slot>    
    </product>    
</slot_meta_data>

这是我的代码

string newURL = "RESTURL";

HttpWebRequest request = WebRequest.Create(newURL) as HttpWebRequest;
HttpWebResponse response = request.GetResponse() as HttpWebResponse;

StreamReader reader = new StreamReader(response.GetResponseStream());

XmlDocument xdoc = new XmlDocument();
xdoc.Load(response.GetResponseStream());

XmlNodeList list = xdoc.SelectNodes("/slot_meta_data[@*]");

foreach (XmlNode node in list)
{
    XmlNode product = node.SelectSingleNode("product");
    string name = product["name"].InnerText;
    string id = product["id"].InnerText;

    Console.WriteLine(name);
    Console.WriteLine(id);
    Console.ReadLine();
}

当我调试列表时,它的计数为0.

1 个答案:

答案 0 :(得分:1)

使用xml linq

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;


namespace ConsoleApplication22
{
    class Program
    {
        const string FILENAME = @"c:\TEMP\TEST.XML";
        static void Main(string[] args)
        {

            XDocument doc = XDocument.Load(FILENAME);

            var results = doc.Descendants("product").Select(x => new {
                name = (string)x.Element("name"),
                slot = x.Elements("slot").Select(y => new {
                    agent_id = (int)y.Element("agent_id"),
                    agent_name = (string)y.Element("agent_name"),
                    index_id = (int)y.Element("index_id"),
                    slot_alias = (string)y.Element("slot_alias")
                }).FirstOrDefault()
            }).ToList();

        }

    }

}