java的xml的解析方式有什么,他们的解析流程是怎么样的,有什么区别
发布网友
发布时间:2022-04-29 17:49
我来回答
共8个回答
懂视网
时间:2022-04-29 22:11
创建客户端Socket向服务器发起连接请求
Socket socket = new Socket("127.0.0.1", 30001);
/* 利用已建立的socket创建输入输出流,处理与服务器端的连接 */
// 向服务器写入数据
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(
socket.getOutputStream()));
writer.write("你好服务器!!!");
writer.flush();
// 从服务器读数据
BufferedReader reader = new BufferedReader(new InputStreamReader(
socket.getInputStream()));
char[] ch = new char[100];
int len = reader.read(ch);
System.out.println("从服务器端接收到的信息:");
System.out.print(new String(ch, 0, len));
// 释放资源
reader.close();
writer.close();
socket.close();
数据库编程
JDBC是Java中提供的一套数据库编程API。
DriverManager类用于管理JDBC驱动的服务类。
Connection接口代表数据库连接。
Statement接口代表SQL语句。
ResultSet接口代表返回的结果集。
Connection conn = null; // 连接对象
Statement stmt = null; // Statement对象
ResultSet rs = null; // 查询结果集
/* 加载驱动 */
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
/* 创建Connection对象 */
// 连接字符串
String url = "jdbc:mysql://localhost:3306/java";
// 用户名
String user = "root";
// 密码
String pwd = "5245";
try {
// 创建连接
conn = DriverManager.getConnection(url, user, pwd);
System.out.println("连接成功");
} catch (SQLException e) {
e.printStackTrace();
}
/* 创建Statement对象 */
try {
stmt = conn.createStatement();
} catch (SQLException e) {
e.printStackTrace();
}
/* 发送SQL语句执行 */
// 添加
// String sql1 =
// "INSERT INTO users(id,username,pwd) VALUES(4,‘HXS‘,‘1995‘)";
// int count = 0;
// try {
// count = stmt.executeUpdate(sql1);
// } catch (SQLException e) {
// // e.printStackTrace();
// }
// /* 处理执行结果 */
// if (count == 1) {
// System.out.println("添加成功");
// } else {
// System.out.println("添加失败");
// }
// 查询
String sql = "SELECT id, username, pwd FROM users";
try {
// 获取查询结果集
rs = stmt.executeQuery(sql);
} catch (SQLException e) {
// e.printStackTrace();
}
try {
// 循环读取下一条记录
while (rs.next()) {
// 获取行中某列值
System.out.println("id = " + rs.getInt("id") + ", username = "
+ rs.getString("username") + ", password = "
+ rs.getString("pwd"));
}
} catch (SQLException e) {
// e.printStackTrace();
}
/* 释放资源:必做 */
if (conn != null)
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
} finally {
if (rs != null)
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
} finally {
if (stmt != null)
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
XML解析技术
XML:可扩展标记语言。
形式:
进行验证的处理器--检查XML文档的有效性和格式规范。
不进行验证的处理器--检查XML文档的格式规范。
XML解析器使用的两种基本API:
文档对象模型(DOM):一种基于树结构的API。
XML简单API(SAX):一种事件驱动的API。
<!-- 企鹅 -->
<penguins>
<penguin id="1">
<name>豆豆</name> <!-- 姓名 -->
<close>100</close> <!-- 亲密值 -->
<health>100</health> <!-- 健康值 -->
<gender>男</gender><!-- 性别 -->
</penguin>
<!ELEMENT pet (dogs,penguins)>
<!ELEMENT dogs (dog*)>
<!ELEMENT dog (name,close,health,breed)>
<!ATTLIST dog id CDATA #REQUIRED>
<!ELEMENT penguins (penguin*)>
<!ELEMENT penguin (name,close,health,gender)>
<!ATTLIST penguin id CDATA #REQUIRED>
<!ELEMENT name (#PCDATA)>
<!ELEMENT close (#PCDATA)>
<!ELEMENT health (#PCDATA)>
<!ELEMENT breed (#PCDATA)>
<!ELEMENT gender (#PCDATA)>
Java网络编程丶数据库编程丶XML解析技术。
标签:
热心网友
时间:2022-04-29 19:19
答:4种。(或者说是两种,因为JDOM和DOM4J是DOM的两个特殊情况)
1.SAX解析
解析方式是事件驱动机制!
SAX解析器,逐行读取XML文件解析,每当解析到一个标签的开始/结束/内容/属性时,触发事件。
可以在这些事件发生时,编写程序进行相应的处理。
优点:
分析能够立即开始,而不是等待所有的数据被处理。
逐行加载,节省内存,有助于解析大于系统内存的文档。
有时不必解析整个文档,它可以在某个条件得到满足时停止解析。
缺点:
1.单向解析,无法定位文档层次,无法同时访问同一个文档的不同部分数据(因为逐行解析,当解析第n行时,第n-1行)已经被释放了,无法再对其进行操作)。
2. 无法得知事件发生时元素的层次, 只能自己维护节点的父/子关系。
3. 只读解析方式, 无法修改XML文档的内容。
2. DOM解析
是用与平台和语言无关的方式表示XML文档的官方W3C标准,分析该结构通常需要加载整个 文档和内存中建立文档树模型。程序员可以通过操作文档树, 来完成数据的获取 修改 删除等。
优点:
文档在内存中加载, 允许对数据和结构做出更改。访问是双向的,可以在任何时候在树中双向解析数据。
缺点:
文档全部加载在内存中 , 消耗资源大。
3. JDOM解析
目的是成为Java特定文档模型,它简化与XML的交互并且比使用DOM实现更快。由于是第一 个Java特定模型,JDOM一直得到大力推广和促进。
JDOM文档声明其目的是“使用20%(或更少)的精力解决80%(或更多)Java/XML问题” (根据学习曲线假定为20%)
优点:
使用具体类而不是接口,简化了DOM的API。
大量使用了Java集合类,方便了Java开发人员。
缺点:
没有较好的灵活性。
性能不是那么优异。
4. DOM4J解析
它是JDOM的一种智能分支。它合并了许多超出基本XML文档表示的功能,包括集成的XPath 支持、XML Schema支持以及用于大文档或流化文档的基于事件的处理。它还提供了构建文档表示的选项, DOM4J是一个非常优秀的Java XML API,具有性能优异、功能强大和极端易用使用的特点,同时它也是一 个开放源代码的软件。如今你可以看到越来越多的Java软件都在使用DOM4J来读写XML。
目前许多开源项目中大量采用DOM4J , 例如:Hibernate。
热心网友
时间:2022-04-29 20:37
DOM4J,JDOM,SAX
public class DomTest3
{
public static void main(String[] args) throws Exception
{
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document doc = db.parse(new File("student.xml"));
//获得根元素结点
Element root = doc.getDocumentElement();
parseElement(root);
}
private static void parseElement(Element element)
{
String tagName = element.getNodeName();
NodeList children = element.getChildNodes();
System.out.print("<" + tagName);
//element元素的所有属性所构成的NamedNodeMap对象,需要对其进行判断
NamedNodeMap map = element.getAttributes();
//如果该元素存在属性
if(null != map)
{
for(int i = 0; i < map.getLength(); i++)
{
//获得该元素的每一个属性
Attr attr = (Attr)map.item(i);
String attrName = attr.getName();
String attrValue = attr.getValue();
System.out.print(" " + attrName + "=\"" + attrValue + "\"");
}
}
System.out.print(">");
for(int i = 0; i < children.getLength(); i++)
{
Node node = children.item(i);
//获得结点的类型
short nodeType = node.getNodeType();
if(nodeType == Node.ELEMENT_NODE)
{
//是元素,继续递归
parseElement((Element)node);
}
else if(nodeType == Node.TEXT_NODE)
{
//递归出口
System.out.print(node.getNodeValue());
}
else if(nodeType == Node.COMMENT_NODE)
{
System.out.print("<!--");
Comment comment = (Comment)node;
//注释内容
String data = comment.getData();
System.out.print(data);
System.out.print("-->");
}
}
System.out.print("</" + tagName + ">");
}
}
public class SaxTest1
{
public static void main(String[] args) throws Exception
{
//step1: 获得SAX解析器工厂实例
SAXParserFactory factory = SAXParserFactory.newInstance();
//step2: 获得SAX解析器实例
SAXParser parser = factory.newSAXParser();
//step3: 开始进行解析
parser.parse(new File("student.xml"), new MyHandler());
}
}
class MyHandler extends DefaultHandler
{
@Override
public void startDocument() throws SAXException
{
System.out.println("parse began");
}
@Override
public void endDocument() throws SAXException
{
System.out.println("parse finished");
}
@Override
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException
{
System.out.println("start element");
}
@Override
public void endElement(String uri, String localName, String qName)
throws SAXException
{
System.out.println("finish element");
}
}
public class JDomTest1
{
public static void main(String[] args) throws Exception
{
Document document = new Document();
Element root = new Element("root");
document.addContent(root);
Comment comment = new Comment("This is my comments");
root.addContent(comment);
Element e = new Element("hello");
e.setAttribute("sohu", "www.sohu.com");
root.addContent(e);
Element e2 = new Element("world");
Attribute attr = new Attribute("test", "hehe");
e2.setAttribute(attr);
e.addContent(e2);
e2.addContent(new Element("aaa").setAttribute("a", "b")
.setAttribute("x", "y").setAttribute("gg", "hh").setText("text content"));
Format format = Format.getPrettyFormat();
format.setIndent(" ");
// format.setEncoding("gbk");
XMLOutputter out = new XMLOutputter(format);
out.output(document, new FileWriter("jdom.xml"));
}
}
热心网友
时间:2022-04-29 22:11
解析流程就是 通过反射 来获取 每个标签,然后,解析成 对象,封装起来,推荐用 XStream
热心网友
时间:2022-04-30 00:03
使用jdom技术来解析XML,来将xml中的配置获取到Element中,从网上查一下相关使用方式,很容易的。只是我这没有具体的例子。
热心网友
时间:2022-04-30 02:11
1.DOM生成和解析XML文档
2.SAX生成和解析XML文档
3.DOM4J生成和解析XML文档
4.JDOM生成和解析XML
热心网友
时间:2022-04-30 04:35
DOM4J比较好用
热心网友
时间:2022-04-30 07:17
百度啊,到处是