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点,试过很多方法,希望各系大侠看在小弟勤奋好学不辞劳苦,打破砂锅问到底的精神上(其实就是不甘心啊),要是哪位知道的话希望可以指点指点哦 %>_<%
...全文
291 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);
}
}

guoluren_kang 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明白了吧?
代码下载地址: https://pan.quark.cn/s/48b01f0717eb 本文将详细研究有关rtl8822蓝牙驱动及其适配的相关信息。rtl8822是由Realtek公司设计的一种无线通信芯片,主要应用于提供Wi-Fi和蓝牙功能。该芯片被广泛应用于多种现代电子设备中,例如笔记本电脑、路由器、智能手机以及平板电脑等。 我们首先需要理解“驱动”的定义。驱动程序充当计算机硬件与操作系统之间的中介,负责将硬件指令解释为操作系统能够识别的语言。对于rtl8822芯片而言,蓝牙驱动是控制该芯片执行蓝牙通信的核心软件模块,它确保设备能够准确识别并连接其他蓝牙设备。 rtl8822驱动资料通常包括以下几个部分: 1. **Bluetooth Baseband (BB) 驱动**:这一部分负责处理蓝牙的底层通信,包括射频信号的编码与解码,以及数据包的发送和接收。 2. **Bluetooth Host Controller Interface (HCI)**:HCI层是蓝牙驱动的重要组成部分,它确立了蓝牙主机(例如CPU)与控制器(例如rtl8822芯片)之间的接口协议。借助HCI,应用程序能够与蓝牙设备进行互动,如配对、建立连接、传输数据等。 3. **移植文档**:移植文档是将rtl8822蓝牙驱动适配至不同操作系统或平台的关键指南,其中通常包含了详尽的步骤、注意事项以及可能遇到的问题的解决方案。这些文档有助于开发者理解驱动的工作原理,并根据目标系统进行必要的调整。 4. **芯片手册**:Realtek为rtl8822芯片提供的手册是开发和调试驱动的重要参考资料,其中涵盖了芯片的硬件特性、寄存器布局、接口规范、功耗管理等内容。熟悉这些信息能够帮助开发者更深入地...

8,757

社区成员

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

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