我加了加回前任微信信之后他又把我删了是什么意思

求助:c# 对xml文件进行写操作时,为什么只能写入最后一个元素_c#吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:103,846贴子:
求助:c# 对xml文件进行写操作时,为什么只能写入最后一个元素收藏
C# 中代码是这样写的:XmlDocument xmlDoc = new XmlDocument();//xml结构
xmlDoc.Load("student.xml");//声明xmldoc文档并获取路径
XmlNode root = xmlDoc.SelectSingleNode("students");//查找&students&
XmlElement xe1 = xmlDoc.CreateElement("student");//创建一个&student&节点
XmlElement xesub1 = xmlDoc.CreateElement("name");
xesub1.InnerText = textBox6.T//设置文本节点
xe1.AppendChild(xesub1);//添加到&student&节点中
XmlElement xesub2 = xmlDoc.CreateElement("number");
xesub1.InnerText = textBox7.T//设置文本节点
xe1.AppendChild(xesub2);//添加到&student&节点中
XmlElement xesub3 = xmlDoc.CreateElement("age");
xesub1.InnerText = textBox8.T//设置文本节点
xe1.AppendChild(xesub3);//添加到&student&节点中
XmlElement xesub4 = xmlDoc.CreateElement("sex");
xesub1.InnerText = textBox9.T//设置文本节点
xe1.AppendChild(xesub4);//添加到&student&节点中
XmlElement xesub5 = xmlDoc.CreateElement("sdept");
xesub1.InnerText = textBox10.T//设置文本节点
xe1.AppendChild(xesub5);//添加到&student&节点中
root.AppendChild(xe1);
xmlDoc.Save("student.xml");//保存xmldoc文档路径在窗体里写的是这样的但是运行完了,结果是这样的:
五年质保,专业智造
专业还填到name去了。
复制粘贴都这么不认真,看看你每次设置文本节点都填到 xesub1.InnerText 里。
登录百度帐号推荐应用
为兴趣而生,贴吧更懂你。或xml中结点与元素的区别
XML元素和结点的区别:
1、区别介绍
Element是Node的扩展,所以也更实用一些。例如,用Element可以方便的获得Node的属性getAttribute(String
attrName)如果用Node,可以得到一个属性集,还要进一步检索才可得到想要的属性。一个结点不一定是一个元素,而一个元素一定是一个结点。
Element是Node的子集,XmlNode表示一个节点,包括XmlElement(元素)和XmlAttribute(属性)等。
lock="true"&&&&&&&&&&&&&&//node&&
&&&&&&&Time&&&&&&&&&&&&&&&&&&&&&&&&//node&&
&&&&&&&&&&StringValue&&&&&&&&&&&&&&//node&&
&&&&&&&/Time&&&&&&&&&&&&&&&&&&&&&&
&/Alarm&&&&&&&&&&&&&&&&&&&&&&&&&&&
以上Alarm(元素节点),lock(属性节点),Time(元素节点),StringValue(文本节点)都是Node,但是只有
&Alarm&......&/Alarm&和&Time&StringValue&/Time&是Element&&
2、具体功能实现
2.1如果我想取得一个Node中的Attribute,那该怎么实现呢? 即:
id=data1&&
name=mydata&&/data&&&
& 怎样将data中的&&
id,name及其值取出来?
两种方式: &
& 1.先取得node &
& String & strID
node.getAttributes().getNamedItem("id").getNodeValue();
& String & strName
node.getAttributes().getNamedItem("name").getNodeValue();
& 2.先取得element &
& String & strID
& = & element.getAttribute("id");
& String & strName
element.getAttribute("name");
2.2、我想使用一个通用的方法,将一个Element中的所有属性取出来!但事先我不知道该Element有多少个属性,并且不知道每个属性的name是什么!
先取得node &
& NamedNodeMap & nnm
& = & node.getAttributes();
for(int&i=0;i&nnm.getLength();i++)
& System.out.println(nnm.item(i).getNodeName());
& System.out.println(nnm.item(i).getNodeValue());
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。&>&&>&&>&&>&使用DOM4J对XML文件操作-添加、修改、删除、获取元素节点
使用DOM4J对XML文件操作-添加、修改、删除、获取元素节点
上传大小:19.23MB
使用DOM4J对XML文件操作-添加、修改、删除、获取元素节点
综合评分:4.3(32位用户评分)
所需积分:0
下载次数:293
审核通过送C币
创建者:id_rin
创建者:qq_
创建者:qq_
课程推荐相关知识库
上传者其他资源上传者专辑
开发技术热门标签
VIP会员动态
您因违反CSDN下载频道规则而被锁定帐户,如有疑问,请联络:!
android服务器底层网络模块的设计方法
所需积分:0
剩余积分:720
您当前C币:0
可兑换下载积分:0
兑换下载分:
兑换失败,您当前C币不够,请先充值C币
消耗C币:0
你当前的下载分为234。
使用DOM4J对XML文件操作-添加、修改、删除、获取元素节点
会员到期时间:
剩余下载次数:
你还不是VIP会员
开通VIP会员权限,免积分下载
你下载资源过于频繁,请输入验证码
您因违反CSDN下载频道规则而被锁定帐户,如有疑问,请联络:!
若举报审核通过,可奖励20下载分
被举报人:
举报的资源分:
请选择类型
资源无法下载
资源无法使用
标题与实际内容不符
含有危害国家安全内容
含有反动色情等内容
含广告内容
版权问题,侵犯个人或公司的版权
*详细原因:laokaddk 的BLOG
用户名:laokaddk
文章数:983
评论数:106
访问量:2474708
注册日期:
阅读量:5863
阅读量:12276
阅读量:407756
阅读量:1096085
51CTO推荐博文
Qt学习之XML读写操作小结
&&&&&&&&& 西安电子科技大学
在&QQ便签&项目组中我负责有关后台XML操作的实现部分,现在对在项目中用到的XML的相关操作进行简单的小结。
我们知道对XML的操作有两种方法,即DOM方式和SAX方式。二者主要区别是:DOM实现方式操作非常简单,但不适合处理过大文件;而SAX实现方式是能处理很大的XML文件,但是需要开发者写一些复杂的代码。Qt提供了对应于这两种用于读取、操作和编写XML的实现类,分别是QDomDocument类和QXmlStreamReader类,由于在项目中涉及的文件不大,因此我们选用QDomDocument类来处理。
项目中涉及便签的增删改查,对应于XML文件中相应标记的读、写和修改,下面分别介绍:
1. 创建节点,将其写入XML文件,主要操作包括:
1).创建根节点:QDomElement root = doc.documentElement(&rootName & );
2).创建元素节点:QDomElement element =&doc.createElement(&nodeName&);
3).添加元素节点到根节点:root. appendChild(element);
4).创建元素文本:QDomText nodeText=doc.createTextNode(&text&);
5).添加元素文本到元素节点:element. appendChild(nodeText);
在本项目中,假设便签的属性有序号、名字、内容、字体、字号、颜色、粗细、斜体、下划线这几项,则在文件中添加一个便签节点的操作如下:
instruction = doc.createProcessingInstruction(&xml&,&version=\&1.0\& encoding=\&UTF-8\&&);
doc.appendChild(instruction);
QDomElement root = doc.createElement(&Notes&);
doc.appendChild(root);
QDomElement note = doc.createElement(&note&);
root.appendChild(note);
QDomElement no = doc.createElement(&no&);
note.appendChild(no);
QDomText no_text = doc.createTextNode(&001&);
则得到一个便签节点,将其保存到test.xml文件中,代码如下:
QFile file(&test.xml&);
if (!file.open(QIODevice::WriteOnly | QIODevice::Truncate |QIODevice::Text))
QTextStream out(&file);
out.setCodec(&UTF-8&);
doc.save(out,4,QDomNode::EncodingFromTextStream);
file.close();
则test.xml文件:
&?xml version=&1.0& encoding=&UTF-8&?&
&&& &note&
&&&&&&& &no&001&/no&
&&&&&&& &name&(13:53:24)&/name&
&&&&&&& &content&A meeting!&/content&
&&&&&&& &font&Script MT Bold&/font&
&&&&&&& &fontSize&16&/fontSize&
&&&&&&& &color& #00ffff&/color&
&&&&&&& &weight&0&/weight&
&&&&&&& &fontItalic&true&/fontItalic&
&&&&&&& &fontUnderline&true&/fontUnderline&
&&& &/note&
上面是创建一个便签节点,若要继续添加便签节点,则需要在已有节点后增加一个新节点,并重写入XML文件。
2. 加载、查找便签时要读取XML文档中的节点信息,DOM实现方式是将整个文档当作一个对象来装入内存进行处理,然后开发者可以访问这个对象中的每一个节点,每一个节点对应XML文件里的一个标记。
&&&&&& 主要操作包括:
&&&&&& 1).读取根节点:QDomElement root = doc.documentElement();
2).读取第一个子节点:QDomNode node = root.firstChild();
3).读取下一个子节点:node = node.nextSibling();
4).匹配结点标记:node.toElement().tagName() == &note&
5).读取节点文本:no = childNode.toText().data();
以下是项目中读取便签属性的函数实现代码:
void MainWindow::parseAttr(const QDomElement &element)
&&& QString no,name,content,font,fontSize,
&&& QDomNode node = element.firstChild();
&&& while (!node.isNull()) {
&&&&&&& if (node.toElement().tagName() == &note&) {//匹配note节点
&&&&&&&&&&& parseAttr(node.toElement());
&&&&&&& } else if (node.toElement().tagName() == &no&) {//匹配属性no
&&&&&&&&&&& QDomNode childNode = node.firstChild();
&&&&&&&&&&&&&&& if (childNode.nodeType() == QDomNode::TextNode) {
&&&&&&&&&&&&&&&&&&&& no = childNode.toText().data();
&&&&&&&&&&&&&&& }
&&&&&&& else if (node.toElement().tagName() == &name&) //匹配属性name
&&&&&&&&&&&&&&&&& ...
&&&&&&&&&&&&&&&&& ...
&&&&&&& node = node.nextSibling();//读取兄弟节点
3. 删除便签时,要删除相应的XML节点,用到的主要函数为:root.removeChild(node); 但在删除某个节点后要重写整个文件。
以上对XML文件的重写操作是必须的,因此在文件的打开方式中要加上QIODevice::Truncate,表示覆盖重写。目前还没有找到可以直接修改文件的方法,但若文件很大的情况下,必须考虑相应的效率问题。
由于本项目在启动时需要将所有便签加载到内存,因此选用DOM方式比较合适,但如果处理的XML文件很大,而且不需要全部读到内存时,可以用SAX实现方式,它按阶段将文档读取到内存中,在碰到标签或者其它阶段的时候,可以调用开发者预先设计好的回调函数去处理,这样效率比DOM方式更高。
了这篇文章
类别:┆阅读(0)┆评论(0)

我要回帖

更多关于 几年后加回前任微信 的文章

 

随机推荐