C# 什么&x2019;这个密码有什么问题

C# 什么&x2019;这个密码有什么问题,c#,.net,xmlreader,C#,.net,Xmlreader,为什么while循环不返回任何内容?我想这与.NET有关。我有.NET2.0。问题是while语句将执行一次,然后退出,就像没有具有该名称的节点一样,而实际上确实存在 以下是XML的一个示例: <rss version="2.0"> <channel> <title>...</title> <link>...</link> <description>...&

为什么while循环不返回任何内容?我想这与.NET有关。我有.NET2.0。问题是while语句将执行一次,然后退出,就像没有具有该名称的节点一样,而实际上确实存在

以下是XML的一个示例:

<rss version="2.0">
    <channel>
        <title>...</title>
        <link>...</link>
        <description>...</description>
        <lastBuildDate>...</lastBuildDate>
        <item>
            <title>User greeting</title>
            <guid>...</guid>
            <link>http://...</link>

            <description>Voicebox number: 1</description>
            <author>Free Conference Call</author>
        </item>
        <item>
            <title>User greeting</title>
            <guid>...</guid>
            <link>http://...</link>

            <description>Voicebox number: 1</description>
            <author>Free Conference Call</author>
        </item>
    </channel>
</rss>

调用时,您已经从响应中读取了所有数据

resXML = readerStream.ReadToEnd();
readerStream
readStream
都是在
receiveStream
之上分层的,因此一旦您通过其中一个读取了所有数据,就无法通过另一个再次读取

对于响应,您应该有一个
using
语句——理想情况下是包含各种流。既然您可以从流中创建
XmlReader
,而不仅仅是
StreamReader
,为什么不直接使用以下内容:

XmlReaderSettings settings = new XmlReaderSettings();
settings.ConformanceLevel = ConformanceLevel.Fragment;
settings.IgnoreWhitespace = true;
settings.IgnoreComments = true;

using (HttpWebResponse response = (HttpWebResponse)webreq.GetResponse())
{
   using (Stream stream = response.GetResponseStream())
   {
       using(XmlReader reader = XmlReader.Create(stream, settings))
       {
           // Do stuff here
       }
   }
}

此外,我通常建议创建一个
XmlDocument
或类似的东西,而不是使用
XmlReader
——它对大型文档的伸缩性不好,但使用起来更容易。

调用时,您已经从响应中读取了所有数据

resXML = readerStream.ReadToEnd();
readerStream
readStream
都是在
receiveStream
之上分层的,因此一旦您通过其中一个读取了所有数据,就无法通过另一个再次读取

对于响应,您应该有一个
using
语句——理想情况下是包含各种流。既然您可以从流中创建
XmlReader
,而不仅仅是
StreamReader
,为什么不直接使用以下内容:

XmlReaderSettings settings = new XmlReaderSettings();
settings.ConformanceLevel = ConformanceLevel.Fragment;
settings.IgnoreWhitespace = true;
settings.IgnoreComments = true;

using (HttpWebResponse response = (HttpWebResponse)webreq.GetResponse())
{
   using (Stream stream = response.GetResponseStream())
   {
       using(XmlReader reader = XmlReader.Create(stream, settings))
       {
           // Do stuff here
       }
   }
}

此外,我通常建议创建一个
XmlDocument
或类似的东西,而不是使用
XmlReader
——它对大型文档的伸缩性不好,但更易于使用。

为什么不使用Linq to XML?将有助于编写更可读/可维护的代码

XElement rssFile = XElement.Load(content);
IEnumerable<XElement> channels = rssFile.Descendants("channel");
foreach(XElement channel in channels)
{
    Console.WriteLine("link: " + channel.Element("link").Value);
    Console.WriteLine("description: " + channel.Element("description").Value);
}
XElement rssFile=XElement.Load(内容);
IEnumerable channels=rssFile.substands(“通道”);
foreach(通道中的XElement通道)
{
Console.WriteLine(“链接:+channel.Element(“链接”).Value”);
Console.WriteLine(“描述:”+channel.Element(“描述”).Value);
}

除此之外,Jon所说的

为什么不使用Linq转换XML?将有助于编写更可读/可维护的代码

XElement rssFile = XElement.Load(content);
IEnumerable<XElement> channels = rssFile.Descendants("channel");
foreach(XElement channel in channels)
{
    Console.WriteLine("link: " + channel.Element("link").Value);
    Console.WriteLine("description: " + channel.Element("description").Value);
}
XElement rssFile=XElement.Load(内容);
IEnumerable channels=rssFile.substands(“通道”);
foreach(通道中的XElement通道)
{
Console.WriteLine(“链接:+channel.Element(“链接”).Value”);
Console.WriteLine(“描述:”+channel.Element(“描述”).Value);
}

除此之外,Jon所说的

就像Jon所说的,您已经读取了所有数据,因此无法再次读取,但是,您应该能够将流的位置设置回零,然后再次读取

receiveStream.Position=0

我想说的另一个技巧是将变量“readStream”重命名为“reader”或其他名称,因为它是StreamReader而不是流

保重,,
Tom

正如Jon所说,您已经读取了所有数据,因此无法再次读取,但是,您应该能够将流的位置设置回零,然后再次读取

receiveStream.Position=0

我想说的另一个技巧是将变量“readStream”重命名为“reader”或其他名称,因为它是StreamReader而不是流

保重,,
汤姆

ah评论。。不习惯这些,它们让人困惑。你想成为一名评论员吗?啊,评论。。不习惯这些,它们让人困惑。你想成为一名评论员吗?我不能,它说seek被禁用了。不知道为什么。我不能,上面说seek被禁用了。不知道为什么。