Read XML NodeList

本文关键字:NodeList XML Read | 更新日期: 2023-09-27 18:15:45

我正在尝试解析来自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

Read XML NodeList

使用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();
        }
    }
}