(求点实用代码和建议)怎么读写XML文件?

dyw31415926 2006-11-20 11:35:05
以前没怎么用到XML,都是文本读写,现在用到了,到MSDN找了一下,感觉勉强能读写了,不过还是希望各位大侠出手相助,让偶少走弯路.
目的:读XML进行操作(有高效率算法更好,要是没有, 能实现也可以啦)
现有一个类MessageClass,希望将其字段放如XML文件中, 并能执行读和设置的操作
public MessageClass
{
string s = "字段有字符串类型的哈";
int intVar = 10;//还有int类型
byte[] byteArray = new byte[]{0x01,0x02,0x30};//这个更难办,星星们来帮一下?怎么放进去?
short shortVar = 20;//还有short类型...
long longVar = 10000;//还有long类型...为什么不全是string呢,多好啊


}
下面是我希望xml操作类有的函数,不知道怎么写,希望各位赏点代码来:)
public class ClassA

{

public ClassA(String fileName) // 设定储存文件名称
{
}
public String getString(String name) // 提取某个字符串

{

}
public void setString(String name, String value) // 设定某个字符串

{

}
public byte[] getBytes(String name) throws Exception // 提取某个byte array

{

}

public void setBytes(String name, byte[] value) throws Exception // 设定某个byte array

{

}

public void setBytes(String name, byte[] value, int off, int len) throws Exception

{

}

public byte getByte(String name) throws Exception

{

}

public void setByte(String name, int value) throws Exception

{

}

public int getInt(String name) throws Exception

{

}

public void setInt(String name, int value) throws Exception

{

}

public short getShort(String name) throws Exception {

}

public void setShort(String name, int value) throws Exception

{

}

public long getLong(String name) throws Exception {

}

public void setLong(String name, long value) throws Exception

{

}
----------------------------

byte[] byteArray = new byte[]{0x01,0x02,0x30};
<arrayEle>byte[]数组的内容,怎么存呢</arrayEle>
执行getBytes("arrayEle")应取得整个byteArray,即返回byte[]
而getByte("arrayEle")只取得第一个,再调用一次得第二个 ,即返回一个byte

而setbyte可以设置某一个byte,如第二个0x02可以设成其他值
-----------------------------------------------
问题有点难度,有能力的可以练练手
...全文
311 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
dyw31415926 2006-11-23
  • 打赏
  • 举报
回复
郑重声明:本问题还没有解决!上面我说的方法是错误的,在byte[]的元素为单数时回出错.
sdl2005lyx() 最后的方法效率过于低,正在寻求更好的办法ing
sdl2005lyx 2006-11-22
  • 打赏
  • 举报
回复
lz,短信已经回复,请查看!!
dyw31415926 2006-11-22
  • 打赏
  • 举报
回复
问题已经解决,谢谢大家, 结贴!!
byte[] byteArray = new byte[] { 0x01, 200 };
string s = System.Text.Encoding.Unicode.GetString (byteArray );
byte[] array = System.Text.Encoding.Unicode.GetBytes(s);
-------------------------
注意:System.Text.Encoding.Unicode若是选Default的话,则当byte里的内容大于128时会,从s再转回byte[]
时就会出错,得不到正确结果!!
sdl2005lyx 2006-11-22
  • 打赏
  • 举报
回复
<回复>请问,那对于byte[]数组怎么存进去?我希望放进去后,能对这个byte数组进行读取和更改的
如放一个byte[3],进去,我能对放在xml里的byte[1]那个内容进行重设置,这个问题该怎么解决呢, 给写代码或提示好吗,谢谢


对byte[]数组,处理稍微复杂一些,你先把byte[] byteArray = new byte[]{0x01,0x02,0x30}变成一个完整的字符串“010230”或“01 02 30”,(这个过程想必你很快就作出来),如同其他做法把这个字符串写到xml中去。

对xml文件的时候,你会读出:
sting str="01 02 30";//以有空格的为例
string[] stra = str.Split(" ");
byte[] b = new byte[stra.Length];
for( int i=0 ; i<stra.Length ; i++ )
{
b[i] = byte.Parse(stra[i],System.Globalization.NumberStyles.HexNumbe);
//注意:后面这个参数非常重要,很多人容易漏掉。否则,字符串中含有‘a’-‘e’
//的任何字符,都会报错,原因是编译器当成ASCII,而非16进制数
}
dyw31415926 2006-11-22
  • 打赏
  • 举报
回复
sdl2005lyx() ( )的站内短信给了我不少提示,还有楼上各位兄弟们,谢谢
shoushii 2006-11-20
  • 打赏
  • 举报
回复
(守护) 名字很像啊
lovefootball 2006-11-20
  • 打赏
  • 举报
回复
如果序列化没接触过的话

用XPath找到结点
然后操作
然后doc.Save
lovefootball 2006-11-20
  • 打赏
  • 举报
回复
直接序列化不完了么?

操作XML的方法很多
DOM、流、DataSet、序列化等
dyw31415926 2006-11-20
  • 打赏
  • 举报
回复
不是吧,都被吓跑啦,能解决哪一部分算哪一部分,又没说要全部解决,有建议提建议,会写代码的写代码,互相帮助,这才是csdn里的气氛哈,不够分可再加,:)
lijgame 2006-11-20
  • 打赏
  • 举报
回复
微软都帮我们做好了。。。
楼主是想自己解析xml文件么?如果不需要的话只需把类写成这样就行了
public MessageClass
{
[XmlAttribute (AttributeName=/*MSG0*/"s")]
string s = "字段有字符串类型的哈";

[XmlAttribute (AttributeName=/*MSG0*/"Var")]
int intVar = 10;//还有int类型
...


}
sdl2005lyx 2006-11-20
  • 打赏
  • 举报
回复
lz:在net中,有以下几个类可以方便实现你的要求:
1、XmlDocument。
这个要求你比较熟悉xml文档对象模型DOM,DOM 使您能够以编程方式读取、处理和修改 XML 文档。有点难度。
2、XmlTextWriter、XmlTextReader
对xml文件的读写,相对简单一些。

msdn上面有详细的介绍,根据你的需要,选择用哪个。
muyanpeng_mail 2006-11-20
  • 打赏
  • 举报
回复
mark up up ~~


---------------

LZ 坚持住 好贴

110,530

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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