xml写操作总结

时间:2024.5.7

这种写法能够支持指定字符编码,不会出现中文乱码问题。

filepath = filepath + dt+"/"+video.getChanelid()+"/";

String filename = video.getVideoid() +".xml"; File dir = WriteHistory.createFileDirectory(filepath); File file = new File(dir,filename); Writer wr = new BufferedWriter(new OutputStreamWriter( new FileOutputStream(file),"utf8")); document.write(wr); wr.close();

以下这种格式会出现中文乱码问题:

newFolder(filepath,dt,video.getChanelid());

XMLWriter writer = new XMLWriter(new FileWriter(new writer.write(document); writer.close(); File(filepath+dt+"/"+video.getChanelid()+"/"+video.getVideoid()+".xml")),format);

Dom4j无法以UTF-8保存xml文件,Invalid byte 2 of 2-byte UTF-8 sequence -hxzon动手 -gdo

这几天开始学习dom4j,在网上找了篇文章就开干了,上手非常的快,但是发现了个问题就是无法以UTF-8保存xml文件,保存后再次读出的时候会报

“Invalid byte 2 of 2-byte UTF-8 sequence.”这样一个错误,检查发现由dom4j生成的这个文件,在使用可正确处理XML编码的任何的编辑器中中文成乱码,从记事本查看并不会出 现乱码会正确显示中文。让我很是头痛。试着使用GBK、gb2312编码来生成的xml文件却可以正常的被解析。因此怀疑的dom4j没有对utf-8编 码进行处理。便开始查看dom4j的原代码。终于发现的问题所在,是自己程序的问题。

在dom4j的范例和网上流行的《DOM4J 使用简介》这篇教程中新建一个xml文档的代码都类似如下

public void createXML(String fileName) {

document.nbspdoc = org.dom4j.document.elper.createdocument.); Element root = doc.addElement("book");

root.addAttribute("name", "我的图书");

Element childTmp;

childTmp = root.addElement("price");

childTmp.setText("21.22");

Element writer = root.addElement("author");

writer.setText("李四");

writer.addAttribute("ID", "001");

try {

org.dom4j.io.XMLWriter xmlWriter = new org.dom4j.io.XMLWriter( new FileWriter(fileName));

xmlWriter.write(doc);

xmlWriter.close();

}

catch (Exception e) {

System.out.println(e);

}

}

在上面的代码中输出使用的是FileWriter对象进行文件的输出。这就是不能正确进行文件编码的原因所在,java中由Writer类继承下来的子类 没有提供编码格式处理,所以dom4j也就无法对输出的文件进行正确的格式处理。这时候所保存的文件会以系统的默认编码对文件进行保存,在中文版的 window下java的默认的编码为GBK,也就是所虽然我们标识了要将xml保存为utf-8格式但实际上文件是以GBK格式来保存的,所以这也就是 为什么能够我们使用GBK、GB2312编码来生成xml文件能正确的被解析,而以UTF-8格式生成的文件不能被xml解析器所解析的原因。

好了现在我们找到了原因所在了,我们来找解决办法吧。首先我们看看dom4j是如何实现编码处理的

public XMLWriter(OutputStream out) throws UnsupportedEncodingException {

//System.out.println("In OutputStream");

this.format = DEFAULT_FORMAT;

this.writer = createWriter(out, format.getEncoding());

this.autoFlush = true;

namespaceStack.push(Namespace.NO_NAMESPACE);

}

public XMLWriter(OutputStream out, OutputFormat format) throws UnsupportedEncodingException {

//System.out.println("In OutputStream,OutputFormat");

this.format = format;

this.writer = createWriter(out, format.getEncoding());

this.autoFlush = true;

namespaceStack.push(Namespace.NO_NAMESPACE);

}

/**

* Get an OutputStreamWriter, use preferred encoding.

*/

protected Writer createWriter(OutputStream outStream, String encoding) throws UnsupportedEncodingException {

return new BufferedWriter(

new OutputStreamWriter( outStream, encoding )

);

}

由上面的代码我们可以看出dom4j对编码并没有进行什么很复杂的处理,完全通过java本身的功能来完成。所以我们在使用dom4j的来生成我们的 XML文件时不应该直接为在构建XMLWriter时,不应该直接为其赋一个Writer对象,而应

该通过一个OutputStream的子类对象来构 建。也就是说在我们上面的代码中,不应该用FileWriter对象来构建xml文档,而应该使用FileOutputStream对象来构建所以将代码 修改入下:

public void createXML(String fileName) {

document.nbspdoc = org.dom4j.document.elper.createdocument.); Element root = doc.addElement("book");

root.addAttribute("name", "我的图书");

Element childTmp;

childTmp = root.addElement("price");

childTmp.setText("21.22");

Element writer = root.addElement("author");

writer.setText("李四");

writer.addAttribute("ID", "001");

try {

//注意这里的修改

org.dom4j.io.XMLWriter xmlWriter = new org.dom4j.io.XMLWriter( new FileOutputStream(fileName));

xmlWriter.write(doc);

xmlWriter.close();

}

catch (Exception e) {

System.out.println(e);

}

}

至此DOM4J的问题编码问题算是告一段落,希望对此文章对其他朋友有用。


第二篇:XML操作总结


查询

步骤:1.判断文件是否存在

2.进行读取——(1)创建数据表(2)创建数据列

(3)将数据列的对象添加到数据表(4)加载文件

(5)创建数据行并添加数据(6)将数据行的对象添加到数据表

(7)将数据表数据赋给DataGradView的DataSource;

*(8)更改DataGradView的列名

详解:

1.验证文件

if(File.Exists(“文件名”)==true)

{ 存在 }

2.(1)创建数据表

DataTable dt = new DataTable();创建数据表

(2)创建数据列(可以没数据类型)

DataColumn dc = new DataColumn("列名","数据类型");

(3)将数据列的对象添加到数据表

dt.Columns.Add(dc);

(4)加载文件

XmlDocument xmlDoc = new XmlDocument();实例化根节点

xmlDoc.Load("Xml文件名");读取该文件的结构

(5) 创建数据行并添加数据

XmlNodeList xnlList =xmlDoc.SelectSingleNode("节点名").ChildNodes; 获取该节点下的所有子节点!存入到节点集合中

for( int i=0;i〈xnlList.Count;i++ )

{

DataRow dr = dt.NewRow();创建数据行

dr[“列名”]=xnlList.Item(i).ChildNodes[“该节点”].InnerText;

dr.Rows.Add(dr); 将数据行添加到数据表

}

获取xnlList中的第i个子节点

xnlList.Item(i) 或 xnlList[i]

获取xlList中的第i个子节点下的第0个子节点

xnlList.Item(i).ChildNodes[0]. InnerText ;

xnlList[i].InnerText;

(6) 将数据行的对象添加到数据表

dt.Rows.Add(dr); dr是数据行实例的对象

(7) 将数据表数据赋给DataGradView的DataSource;

控件名.DataSource =dt

(8)更改DataGradView的列名

this.dgv. Columns[“列名”]. HeaderText=“要显示的列名”

添加

步骤:1.判断文件是否存在 (略)

2.进行添加——(1)加载文件 (2)查找根节点 (3)创建不同节点

(4)给节点添加内容 (5)创建属性 (6)给属性赋值

(7)将属性添加到不同节点 (8)建立节点之间的从属关系

(9)保存文件

详解:

进行添加

(1)加载文件

XmlDocument xmlDoc = new XmlDocument();

xmlDoc.Load(“文件名”);

(2)查找根节点

XmlNode xmlNode = xmlDoc.SelectSingleNode(“节点名”);

(3)创建不同节点

XmlElement 节点对象名 = xmlDoc.createElement_x(“节点名”);

(4)给节点添加内容

节点对象名.InnerText =“要赋的值”;

(5)创建属性

XmlAttribute 属性对象名 = xmlDoc.CreateAttribute(“属性名”);

(6)给属性赋值

属性对象名。Value =“值”;

(7)将属性添加到不同节点

节点对象名.Attribute。Append(属性对象名);

(8)建立节点之间的从属关系

Eg:

XmlElement AA = xmlDoc.createElement_x(“A”);

XmlElement BB = xmlDoc.createElement_x(“B”);

AA.AppendChild(BB)——使BB节点成为AA的子节点

(9) 保存文件

xmlDoc.Save(“文件名”);

删除

步骤:1.判断xml文件是否存在。

2.删除操作——(1)加载文件(2)获取节点下的所有子节点,并进行判断

(3)删除(4)保存文件

详解:

(1) 略

(2) 一般根据id节点删除或者id属性删除!则,必须先知道id节点在什么位置!然后先获得它的父节点!暂借以学生管理系统为例。它的xml结构如下:

〈?xml version="1.0"?>

〈Student>

〈StudentMessage ManagerName="学生">

〈id NAME="编号">1〈/id>

〈Name NAME="姓名">胡子〈/Name>

〈Age NAME="年龄">21〈/Age>

〈Sex NAME="性别">男〈/Sex>

〈CreateDate NAME="注册日期">20xx-4-8〈/CreateDate>

〈/StudentMessage>

〈Student>

获得〈Student〉节点下的子节点〈StudentMessage> 存入节点结合中!现在集合的长度为2

XmlNodeList xnl = xmlDoc.SelectSingleName(“Student”).ChildNodes;

因为〈id〉节点是〈 StudentMessage 〉节点下的第0个节点即 FirstChild 但此方法有局限性!id刚好是第以各节点,所以可以直接用FirstChild ,这个方法(一)在更新时用方法(二)!

String id =xnl[0].FrstChild.InnerText;

If(id==“单击某条信息后获得的该条信息的id”)

{

xmlDoc.SelectSingleNode(“Student”).RomoveChild(xnl[0]);

MessageBox.Show(“OY成功”);

}

(3) 删除

for(int i=0;i〈xnl.Count;i++) 一定要在for循环中判断

{

If(id==“单击控件后获得的id”)

{

xmlDoc.SelectSingleNode(“Student”).RemoveChild(xnl[0]);

MessageBox.Show(“OY成功”);

}

}

RemoveChild(“节点名”)——移除制定的子节点

xnl [0]——〈 StudentMessage〉节点

XmlDoc.SelectSingleNode(“Student”);.RemoveChild(xnl[0]);——

〈Student〉节点中的〈 StudentMessage〉节点

(4) 保存

xmlDoc.Save(“文件名”);

【更新】 删除

步骤:1.判断xml文件是否存在。

2.更新操作—— (1)加载文件(2)获取节点下的所有子节点,并进行判断

(3)修改(4)保存

详解:

(1)略

(2)同删除一样,也要获得id所在的节点位置;现在用方法(二)获得id 〈?xml version="1.0"?>

〈Student>

〈StudentMessage ManagerName="学生">

〈id NAME="编号">1〈/id>

〈Name NAME="姓名">胡子〈/Name〉

〈Age NAME="年龄">21〈/Age>

〈Sex NAME="性别">男〈/Sex>

〈CreateDate NAME="注册日期">20xx-4-8〈/CreateDate>

〈/StudentMessage>

〈Student>

获得〈Student〉节点下的子节点〈 StudentMessage 〉存入节点结合中!现在集合的长度为2

XmlNodeList xnl = xmlDoc.SelectSingleName(“Student”).ChildNodes; Foreach(XmlNode node in xnl)

{

XmlElement xe = (XmlElement)node;

XmlNodeList xnlId =xe.GetElementByTagName(“id”);

If(xnlId>0)

{

If(xnlId[0].InnerText==“单击某条信息后获得的该条信息的id”)

{

XmlNodeList xnl2 =xe.ChildNodes;

Foreach(XmlNode node2 in xnl2)

{

XmlElement xe2 = (XmlElement)node2;

If(xe2.Name==”Name”)

{

xe2.InnerText =“更改的值”

}

.. .. .. .. ..

}

}

}

}

String id =xnl[0].FrstChild.InnerText;

XmlElement xe = (XmlElement) node;——将节点转换成为元素

Xe.GetElementByTagName(“id”); ——它返回的该节点下的所有子代元素列表,也是集合!

XmlNodeList xnlId =xe.GetElementByTagName(“id”)——之所以转换,我认为就是为了通

XmlElement对象的方法 xe.GetElementByTagName(“节点名”)——获得该节点下的内容!

XnlId[0].InnerText——获取集合下标为 0 的元素!

XnlId.Item(0).ChildNodes[0].InnerText——也可以这样获取下标为0的元素

注:以上各总结,仅供参考理解!解法不唯一


第三篇:护理技能操作总结


为加强对全院护理质量的监控,根据护理质量管理要求,于20xx年x月x日对全院的临床科室护理人员进行护理技术考核,各科室抽考1人,共抽考18人(1个科室缺考),其中__人不达标,达标率为___。

各科室抽考的护理人员都进行了考核,大部分质量较好,但也存在较多的问题。皮内注射、皮下注射、肌肉注射存在以下问题:1护士规范化操作不熟练,在考核中不断出顺序颠倒,有的甚至在操作结束后才想起所遗忘的部分。2、操作前后评估欠缺应引起重视。3、忽视无菌观念。操作后忘记洗手,铺无菌盘及使用无菌盘不规范。4、理论知识欠缺。皮试液的剂量单位不清楚,臀大肌无法定位。5、未能真正体现以患者为中心的理念。在操作中不注意与患者进行主动沟通,体位摆放不合理(肌注上下肢伸屈),操作中患者暴露过久。心肺复苏存在以下问题:1、①未能及时呼救。②评估患者意识、呼吸方面:存在颈动脉定位部位不准确;触摸颈动脉时间过短或过长。③人工循环方面:存在按压部位定位手法不正确;按压姿势不正确,未用掌根、手指未互握上翘或肘关节不直;按压频率过快或过慢;按压幅度过深或过浅;2分钟内无法完成5个循环的操作。④未检查颈部情况。⑤人工呼吸方面: 不能进行有效的开放气道(手法不正确、头后仰不够);未检查口腔异物;清理呼吸道方法错误(头未侧一边),吹气方法错误(未观察胸廓起伏情况、吹气时未捏鼻、吹气后未立即放松鼻孔、两次吹气无间隙)。

更多相关推荐:
护理技能操作总结

为加强对全院护理质量的监控,根据护理质量管理要求,于20xx年x月x日对全院的临床科室护理人员进行护理技术考核,各科室抽考1人,共抽考18人(1个科室缺考),其中__人不达标,达标率为___。各科室抽考的护理人…

猎头操作总结

操作总结【转】-徐红荣展现实力、巧妙宣传;多种渠道、搜集资源;游说人才、精诚所至;调查推荐、预防超前。实力宣传人才库人才库内人才数量的多少是一个猎头公司实力的体现。人才数量越多,猎头公司运作的能力越高,成功率越…

十年快消品操作总结-快速消费品销售技巧

十年快消品操作总结(操作新品“死亡”的诱因)每天都有新品在进入市场,同时每天又有新品由于各种各样的原因在死去,我们说:“幸福的家庭都相似,不幸的家庭各有各的原因”,这句话用到让人欢喜让人忧的新品上似乎更有别样的…

有机实验操作总结

经过一个学期的实验课,我对有机实验的认识也逐步深入。第一堂课的简单玻璃工操作还挺有意思的,用过不少仪器,但自己制作还是第一次。在红辣椒中提取红色素这个实验是第一次接触回流和蒸馏操作,后面的实验也多次重复了这两个…

实践操作总结

都龙镇中心学校20xx-20xx学年秋季学期三—六年级科学实践操作考核总结魏贵福秋去冬来,时间转瞬而过,我校三—六年级科学实践操作考核已结束。本次实践考核的理念是进一步激发学生的思维,通过自主探究的学习活动,再…

实验操作总结

看了最近几年的中考化学题,发现每年都会有一些考察实验操作的题,这些题都是以图象的形式考察的,虽然分数不是很多,但学生也要熟练掌握,那我简单的总结了一下这方面的知识点以及常考的实验例题。酒精灯:火焰温度:外焰>内…

操作总结

一:选股基本面+行业+政策扶持+股价+形态主要注意事项:1:选择有资金关注的股2:筹码集中度高的股3:均线排列形态良好4:指标多头或则将要多头二:操作操作上要注意大盘是否适合操作来决定,减少操作的随意性,考虑到…

关于金蝶20xx的操作总结

关于金蝶20xx的操作总结金蝶20xx操作步骤压缩和修复金蝶20xx数据库步骤1查找→administrator→找MsAccessWorkgroupAdministrator→双击→联接→Kingdee安装目…

基因操作总结

质粒重组的注意事项1质粒重组主要包括质粒提取、限制性酶切、目的片段回收、连接及连接产物的转化这五个基本步骤。现在结合本人在实验室长期从事质粒重组的实际情况总结一下质粒重组实验操作的一些注意事项。1.1质粒提取:…

酷比品牌操作总结

酷比品牌操作总结做酷比已经一年的时间了,从三线品牌的运作方式转到一线品牌的运作方式的过程中,我学会了很多东西,让我成长了很多,一年是一个坎,针对在去年的工作中遇到的问题,总结失败的经验,完善团队挑战新高度,20…

数据结构(表结构)相关操作总结

数据结构相关操作:一、表结构的定义:CreateTable表名(列名1数据类型【约束】,列名2数据类型【约束】。。。)二、表结构的修改:1、AlterTable表名AlterCOLUMN原列名,新数据类型2、A…

lotus script 中一些对多值文本域的操作总结

多值文本域在编程时还是挺常用的,它在LS中属于Variant一类,是一个Variant列表。偶谨总结一下多值文本域的常用操作,会的一笑置之便了,没遇到过的希望能有所帮助。[1]查询一个字符串teststring…

操作总结(119篇)