public void saveHistory(String strRead) { String from_account = strRead.split("&")[1].split(":")[0]; String to_account = strRead.split("&")[1].split(":")[1]; String msg = strRead.split("&")[1].split(":")[2]; System.out.println("服务端收到的聊天记录"+msg); UserInforDao dao = new UserInforDao(); if (dao.saveHistory(from_account, to_account,msg)) { JOptionPane.showMessageDialog(null, "保存聊天记录成功"); } else { JOptionPane.showMessageDialog(null, "保存聊天记录失败"); } }
public boolean saveHistory(String from_account, String to_account, String msg) { // TODO Auto-generated method stub DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); DocumentBuilder db; try { db = dbf.newDocumentBuilder(); Document doc = db.parse(new File("XmlFile/History.xml")); NodeList lstUser = doc.getElementsByTagName("history"); StringBuffer sb = new StringBuffer(); for (int i = 0; i < lstUser.getLength(); i++) { Element el = (Element) lstUser.item(i); if (el.getAttribute("myId").equals(from_account) && el.getAttribute("friendId").equals(to_account)) { sb.append(msg).append("\r\n"); el.setTextContent(sb.toString()); System.out.println("xml的聊天记录"+el.getTextContent()); TransformerFactory tff = TransformerFactory .newInstance(); Transformer tf = tff.newTransformer(); tf.transform(new DOMSource(doc), new StreamResult( new File("XmlFile/History.xml"))); return true; } } Element root = doc.getDocumentElement(); Element history = doc.createElement("history"); history.setAttribute("myId", from_account); history.setAttribute("friendId", to_account); Element message=doc.createElement("message"); sb.append(msg).append("\r\n"); message.setTextContent(sb.toString()); history.appendChild(message); root.appendChild(history); TransformerFactory tff = TransformerFactory .newInstance(); Transformer tf = tff.newTransformer(); tf.transform(new DOMSource(root), new StreamResult( new File("XmlFile/History.xml"))); return true; } catch (ParserConfigurationException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } catch (SAXException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } catch (IOException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } catch (TransformerConfigurationException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } catch (TransformerException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } return false; }
聊天记录是这种形式:
1000说:【2013-10-22 12:59:46】
kkkkkkkkkkkkkkkkkkkkkkkkkk
1000说:【2013-10-22 12:59:53】
kkkkkkkkkkkkkkkkjjjjjjjjjjjjjjjjjjjjjjjj
1000说:【2013-10-22 13:43:57】
vvvvvvvvvvvvvvvvvvvvvvvvvvvv
但是结果保存的是酱紫的
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <Historys> <history friendId="1001" myId="1000">1000说:【2013-10-21 23 </history> <history friendId="1002" myId="1000"> </history> <history friendId="1003" myId="1000"> </history> <history friendId="1000" myId="1001">1000说:【2013-10-21 23 </history> <history friendId="1002" myId="1002">1002说:【2013-10-21 20 </history> <history friendId="1003" myId="1005">1003说:【2013-10-22 02 </history> <history friendId="1005" myId="1003">1005说:【2013-10-22 02 </history> </Historys>
相关推荐
App_Data是一个常见的.NET Framework应用程序存放数据文件的目录,它可以包含数据库文件、文本文件或其他数据文件,如XML文件。XML文件的结构化特性使得信息的组织清晰,便于解析和检索。 服务端是这个系统的核心...
XML 中是可以存储图片等二进制内容,我们也常常这样做,比如我们在进行网站信息交换时,利用一个 XML 就可以实现网站信息及其信息附件的交换。实际图片等二进制不仅可转换存储在 XML 中,也可存储在 TXT 文档中,...
在处理XML时,可能会遇到解析错误或其他问题。确保添加适当的错误处理机制,例如使用`begin-rescue-end`块来捕获和处理异常。 6. **性能考虑** 如果处理大量XML数据,优化解析性能是必要的。Nokogiri允许使用`...
与上一个版本一起使用可以可以起到提高效率的目的。本人解析xml的真实文档
XML,全称可扩展标记语言(Extensible Markup Language),是一种用于标记数据的语言,它允许用户自定义标签来描述数据,从而使得数据结构清晰且易于解析。XML被广泛应用于数据交换、配置文件、文档存储等领域。 1....
jbpm流程设计器 + 生成对应xml文档: 内部含有: jbpm控件 1: myflow2:插件原本内容 访问地址:http://localhost:8080/jbpmFlow1/myflow2/demo4.jsp 实现生成对应xml文档 并写有对xml文档读取存储到对象中,...
XMLDoc.Load "F:\example\test.xml" 'xml文件路径根据存放路径不同而不同! Set xn = XMLDoc.selectSingleNode("testlist") '以下为读取xml文件内容,这里用ListView控件显示 Set xlst = xn.childNodes ListView1.List...
这些操作对于处理配置文件、数据存储或者在不同系统间传递信息至关重要。 ### XML文件读取 读取XML文件通常涉及DOM(Document Object Model)或SAX(Simple API for XML)解析器。DOM解析器将整个XML文档加载到内存...
这里,XMLReader对象用于遍历XML结构,并且一旦遇到名为"Field"的节点,就会执行相应的逻辑来提取节点内的信息,然后把这些信息存放到Value数组中。Value数组在每次遇到新的"Field"节点时会被更新,最终它包含了从...
数据区:所有的数据区必须有一个根元素,一个根元素下可以存放多个子元素,但是要求每一个元素必须完结。每一个标记都是区分大小写的。 XML 文件的特点 XML 文件的特点是 tree 树状结构,可以更好的表示出每一个...
XML(Extensible Markup Language)是一种用于标记数据的语言,它被广泛应用于配置文件中,因为它的结构清晰、可读性强,适合存储和传输结构化的信息。在本场景中,我们将探讨如何使用XML配置文件来连接Oracle数据库...
在IT行业中,数据库是存储和管理结构化信息的核心工具,而XML(eXtensible Markup Language)是一种用于标记数据的标准格式,广泛应用于数据交换、配置文件以及数据存储。本主题聚焦于如何将数据库中的数据导出并...
XML生成XSD xml生成xsd 生成xsd工具 工具 使用方法: java -jar trang.jar xml文件绝对路径 要生成...例如在当前目录有文件aaa.xml,需要生成xsd文件名为aaa,并存放在当前目录: java -jar trang.jar aaa.xml aaa.xsd
日志管理是软件开发中的重要部分,`Log.py`可能实现了日志记录功能,可能使用了Python的`logging`库来记录程序运行过程中的信息,便于调试和问题排查。 7. **`XMLDataDir`和`ExcelDataDir`**: 这两个目录分别...
`bin`和`obj`目录是编译时生成的,分别存放编译后的程序集和中间文件。 7. **数据库提供者(Provider)**: `SQLSetProvider.cs`可能是实现`ISetProvider`接口的具体类,专为SQL Server设计。数据库提供者是.NET...
"include"目录通常存放头文件,这些头文件定义了xmlparser的API,供其他C程序调用。"Debug"目录则包含编译后的调试版本库或可执行文件,"src"目录则是源代码,包含xmlparser的实现细节。 要使用xmlparser,首先需要...
“lib”文件夹可能存放了项目依赖的第三方库或自定义的组件,这些库可能包含XML解析、数据验证、日志记录等功能的实现。 “代码说明.txt”可能提供了项目代码的详细解释和使用指南,这对于理解和维护这个系统至关...
- 在解析XML时,根据接收到的元素信息创建`MyData`对象实例。 - 使用MongoDB的`MongoDatabase`和`MongoCollection`接口,创建对应集合,然后调用`insertOne()`或`insertMany()`方法将数据插入到MongoDB中。 3. **...