Silverlight读取xml的时候第二次调用ReadElementContentAsString()提示节点类型 None 上不支持.....

kklaiyou455024780 2010-05-14 01:39:35
Silverlight读取xml的时候第二次调用ReadElementContentAsString()提示节点类型 None 上不支持 ReadElementContentAsString 方法。 行 1,位置 67。
下面是源码:
通过WebClient以流的形式下载XML数据:

void XmlButton_Click(object sender, RoutedEventArgs e) {
Uri uri = new Uri("http://localhost:55880/SilverlightApplication6Site/Handler3.ashx");
WebClient client = new WebClient();
client.OpenReadCompleted += new OpenReadCompletedEventHandler(client_OpenReadCompleted);
client.OpenReadAsync(uri);

}

void ResolverUsingXMLReader(Stream stream) {
XmlReader reader = XmlReader.Create(stream);
reader.Read();
reader.ReadToFollowing("name");
this.Txtname.Text = reader.ReadElementContentAsString();
reader.ReadToFollowing("email");
this.Txtemail.Text = reader.ReadElementContentAsString();

//
我试过注释 reader.ReadToFollowing("name"); 和this.Txtname.Text = reader.ReadElementContentAsString(); email的节点读取就没问题了,至于为什么第二题调用ReadElementContentAsString()方法时值是空的就是百思不得其解,虽然用LINQ to XML实现了这个方法,但是想找找为什么用XmlReader行不通

//-------下面使用LINQ to XML 读取非常简单而且直观,下面的方法可以正确读取xml文件
//XElement person = XElement.Load(stream);
//this.Txtname.Text = (string)person.Element("name");
//this.Txtemail.Text = (string)person.Element("email");
}

void client_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)
{
ResolverUsingXMLReader(e.Result);

}


Handler3.ashx文件代码:
这是发送的数据
context.Response.Write(@"<Person><name>luwei</name><email>455024780@qq.com</email></Person>");

PS--昨晚从11点开始弄这个弄到1点,试过很多方法,希望各系大侠看在小弟勤奋好学不辞劳苦,打破砂锅问到底的精神上(其实就是不甘心啊),要是哪位知道的话希望可以指点指点哦 %>_<%
...全文
290 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
jv9 2010-07-04
  • 打赏
  • 举报
回复
XmlReader和XmlWriter,这个是最初级的存取方法,在同一时间仅能读写一个点。推荐读取最简单的XML文件使用该方法。

对于复杂XML文件,推荐使用LINQ to Xml,效率高,开发简单。

jv9 2010-07-04
  • 打赏
  • 举报
回复
推荐楼主Debug看看,当代码
reader.ReadToFollowing("email");
this.Txtemail.Text = reader.ReadElementContentAsString();
首先email节点和name是否是同一个level的,另外内容是否为空,另外可以参考一下代码:


using System;
using System.Collections.Generic;
using System.Text;
using System.Net;
using System.Xml;
using System.IO;

class MainClass
{
static void Main(string[] args)
{
WebClient client = new WebClient();
Stream xmlFeedStream = client.OpenRead("你的XML");

XmlReader reader = XmlReader.Create(xmlFeedStream);

reader.MoveToContent();

while (reader.ReadToFollowing("item"))
{
ProcessItem(reader.ReadSubtree());
}
}

static void ProcessItem(XmlReader reader)
{
reader.ReadToFollowing("title");
string title = reader.ReadElementContentAsString("title", reader.NamespaceURI);

reader.ReadToFollowing("link");
string link = reader.ReadElementContentAsString("link", reader.NamespaceURI);
Console.WriteLine("{0}\n\t{1}", title, link);
}
}

老Key 2010-07-02
  • 打赏
  • 举报
回复
顶一下。。。
Sunpire 2010-07-02
  • 打赏
  • 举报
回复
在 WPF 中也是如此,和Silverlight没有关系, 难怪我不用 XmlReader 呵呵。

改代码、Debug、查帮助、回贴,再在WPF中测试,一共用了30分钟,LZ还我时间。
Sunpire 2010-07-02
  • 打赏
  • 举报
回复
LZ不会使用Debug么?
不过有一点想说的是,这和 WebClient 没有任何关系,我怀疑和 Silverlight 也应没有关系。

private void button1_Click(object sender, RoutedEventArgs e)
{
using (System.IO.MemoryStream ms = new System.IO.MemoryStream(System.Text.Encoding.UTF8.GetBytes(@"<Person><name>luwei</name><email>455024780@qq.com</email></Person>")))
{
try
{
XmlReader reader = XmlReader.Create(ms);
//reader.Read();
if (reader.ReadToFollowing("name"))
{
MessageBox.Show( reader.ReadElementContentAsString() );
// 将下面这句的注释去掉试试
//MessageBox.Show( reader.ReadElementContentAsString() );
}
if (reader.ReadToFollowing("email"))
{
MessageBox.Show( reader.ReadElementContentAsString() );
}
else
{
MessageBox.Show("EOF");
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
}


LZ 运行一下上面的代码,
然后试一下去掉下面这句的注释:

// 将下面这句的注释去掉试试
//MessageBox.Show( reader.ReadElementContentAsString() );

我的分析是 ReadElementContentAsString() 会自动移到下一个 Element 的位置,LZ明白了吧?
内容概要:本文针对低温环境下微电网运行中电池寿命损耗加剧的问题,提出了一种考虑电池寿命的优化调度模型,并通过Matlab代码实现仿真验证。研究聚焦于低温导致电池性能下降、循环寿命缩短的技术挑战,结合分布式能源出力波动性与负荷需求变化,构建了融合经济性、可靠性与电池健康状态的多目标优化调度框架。通过引入电池老化成本模型,将寿命损耗量化为可调度变量,优化充放电策略以延长电池使用寿命并降低系统综合运行成本。文中详细阐述了目标函数设计、约束条件设定及求解方法,并通过算例分析验证了该策略在抑制深度充放电、均衡电池组使用、提升系统经济性等方面的有效性。; 适合人群:具备电力系统、新能源或优化算法基础知识的研究生、科研人员及从事微电网、储能系统相关工作的工程技术人员。; 使用场景及目标:①应用于高寒地区或冬季低温场景下的微电网能量管理系统设计;②为研究电池寿命与系统经济性之间的权衡关系提供建模思路;③作为Matlab优化工具箱(如Yalmip、CPLEX)在电力系统调度中应用的学习案例; 阅读建议:读者可结合文中提供的Matlab代码,复现仿真结果,深入理解电池老化模型与优化调度的耦合机制,并尝试在此基础上引入更多不确定性因素(如电价波动、负荷预测误差)进行扩展研究。

8,757

社区成员

发帖
与我相关
我的任务
社区描述
WPF/Silverlight相关讨论
社区管理员
  • WPF/Silverlight社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧