当前位置:首页 » 编程语言 » java字符串解析xml

java字符串解析xml

发布时间: 2022-09-01 05:58:54

java解析xml字符串

java解析基本上就是两种方式,一种叫SAX,另一种叫DOM
SAX是基于事件流的解析,DOM是基于XML文档树结构的解析
开源的类库DOM4J,JDOM都是基于这两种方式的。

⑵ java解析xml需要学习哪些知识

下面是一位项目经理的博客内容

最近,总有很多初学Java的朋友询问学Java要学哪些内容。回想8年前我学Java的时候,也是对此一无所知。看着那黑呼呼的命令行窗口,怎么也猜不出它和企业开发有什么关系,也想象不出在控制台输出的乘法口诀1*1=1除了给幼儿园的小朋友做练习之外还有什么用途。
兄弟连JAVA战狼班
现在,经历了8年的开发,终于可以有一点东西,供当年和我一样喜欢Java、想从事于java软件开发的朋友们参考。

1 java语法。通过任何一本Java入门书籍,都可以学会Java的基本语法。千万不要认为,你把书上的例子程序都能写出来就算学会了Java语法。要想真正掌握,还需要做大量的测试题。对语法不准确的理解,会使你写的代码出现逻辑错误。而这些错误会使你在真正的项目开发中吃尽苦头:你认为正确才会写上去。而在几十万行代码中找出几行有逻辑错误的代码,非常困难。因为你几乎不会怀疑你认为正确的代码存在错误。

2 常用类。永远不要写别人已经实现的代码。有很多功能,用JDk中现有的类就可以完成。你需要熟悉JDK.可以通过研究JDK帮助文档和JDK源代码的方式,逐渐了解,你需要的类都在什么地方。一方面,要熟悉有哪些可以直接使用的资源,另一方面,学习一下,SUN公司的工程师怎样写代码。

3 IDE 集成开发环境。现在企业最常用的是IBM公司的eclipse。类似的还有JBuilder,Idea,NetBeans等等。毕竟,只有5%的顶尖高手在使用简单的文本编辑器在写Java代码。多数程序员都是在使用这些东西。

4 数据库.MySql,Oracle,DB2.小项目多数使用MySql这样的免费数据库。大一些的项目会考虑使用Oracle或者DB2. Java项目很少使用SqlServer.因此,你还需要学习数据库方面的一些知识。可以从SQL语言开始。这些数据库都支持标准SQL.学会基本的SQL,参考具体的数据库手册,就可以完成一般的项目开发了。当然,要想使你的程序运行的效率更高,需要更深入的学习。大部分的程序优化,都是从这部分开始的。

5 JDBC Java数据库连接。使用Java程序操作数据库。这部分非常重要。几乎所有的企业项目都会用到。

6 HTML CSS Javascript。
HTML--(HyperTextMark-upLanguage) 超文本标记语言。 CSS --(Cascading Style Sheets)层叠样式表。你千万不要以为,CS又出了加强版。呵呵。 JavaScript--是一种由Netscape的LiveScript发展而来的脚本语言.
准确的说,这些东西和Java语言本身关系不大。但是,现在的企业项目,以B/S结构的居多。因此,我们的Java程序,会有大量的机会和它们打交道。需要提前准备一下。

7 你需要学习如何使用及管理WEB服务器,例如tomcat,并且知道如何在其基础上扩展和维护WEB程序,如何使用它的附加服务,如连接池。

8 JSP Servlet.这两个是初级Java程序员必须掌握的基本技能,是所有B/S结构框架的基础。相应的,还需要学习EL以及JSTL(StandardTagLibraries)和可以选择的第三方TagLibraries,以提高表示层的处理能力。

9 企业流行框架 Struts,Spring,Hibernate等。

10 Java设计模式。有一些特殊的功能,只有按照特定的设计模式才能实现。如果你有了5万行以上的代码经验,可以开始研究一下设计模式。

11 你还要跟上技术发展的步伐,了解在Java项目中使用的新技术。如Ajax等。

还有

目前,JAVA是开发人员的热宠,很多论坛都有不少热爱JAVA的开发人员,也有不少想成为JAVA程序员,
但苦于不知道该如何学习,也不清楚该学些什么知识才能成为一个JAVA程序员。本人在这里抛砖引玉,
和大家讨论成为一个JAVA初级程序员应该具有的知识,与大家共享。
个人认为想成为一个合格的JAVA初级程序员应该具备如下知识:
一、面向对象的知识:JAVA是一个面向对象的开发语言,因此熟悉面向对象对学习JAVA很有必要,您
要了解:什么是对象,什么是类;什么是封装,什么是多态,什么是继承;什么是抽象类,什么是
接口。了解了概念后,您还需要这些概念是如何体现的,如类和对象有什么区别?类是如何封装的?
二、JAVA语法:如果您已经有了开发经验,恭喜您,您学习JAVA语法来将比较容易。如果您有C++等
面向对象语言的开发经验,您只需简单的翻看一下介绍JAVA的相关书籍就可以了。如果您是新手,没有关
系,您下些工夫,好好研究一本JAVA初级教程之类的书就可以了。
学习了JAVA语法,加上面向对象的知识,只有您用心,您就可以写出来比较好的JAVA代码了。如果您再
抽出时间熟悉一下JAVA编程规范,您代码的水平就应该不俗了。
三、JSP和HTML:在我国的绝大多数公司,做JAVA程序员都少不了和JSP以及HTML打交道。因此,想成为JAVA程序员就不可避免的要熟悉JSP和HTML,您最好能知道JSP的几个内置对象,如Session,Request,Reponse,,以及常用的JSP标签,如include,userBean等。尽管一些工具会帮您生成HTML代码,但您还是要熟悉比如title,,<table>,<tr>,<td>等。如果您再熟悉一下JS和CSS就更好了,那会使您制作的页面更友好。
四、WebServer:熟悉了以上三种,可以肯定的说您已经可以制作出来JSP页面了,您也可以在您的页面里使用自己开发的JAVA类(JAVABEAN)了,但您的页面总要跑起来才能看到您要的效果,这就要求您必须熟悉一种WebServer,比如:TOMCAT,RESIN等。您要熟悉如何发布您的应用,如何利用WebServer的数据库资源等。
五、开发工具:大家都知道,开发工具可以帮助您更好更快地开发,因此熟悉几种开发工具很有必要。目前JAVA的开发工具比较流行的有JBuilder,IDEA,Eclipse,HTML的开发工具有Dreamweaver等。
六、熟悉一种框架:熟悉一种框架其实是成为JAVA程序员的一种可选知识,但目前开发B/S结构的应用的开发小组,都差不多会采用一种框架来构建自己的应用系统。框架都会有许多可重用的代码,良好的层次关系和业务控制逻辑,基于框架的开发使你可以省出很多的开发成本。目前比较流行的框架有Struts和WAF等。

我要说明,您要想从本文中学到一些JAVA高级知识是学不到的,因为本文告诉您的作为一个(高级)JAVA工程师应该学什么,而不是告诉您具体的知识细节。
一、JAVA。要想成为JAVA(高级)工程师肯定要学习JAVA。一般的程序员或许只需知道一些JAVA的语法结构就可以应付了。但要成为JAVA(高级)工程师,您要对JAVA做比较深入的研究。您应该多研究一下JDBC、IO包、Util包、Text包、JMS、EJB、RMI、线程。如果可能,希望您对JAVA的所有包都浏览一下,知道大概的API,这样您就发现其实您想实现的很多功能,通过JAVA的API都可以实现了,就不必自己费太多的脑经了。
二、设计模式。其实写代码是很容易的事情,我相信您也有同感。但如何写得好就比较难了。这个“好”字包括代码可重用性,可维护性,可扩展性等。如何写出好的代码往往要借助一些设计模式。当然长期的代码经验积累,只要您用心,会使您形成自己代码风格。相信您的代码也比较符合代码的可重用性,可维护性,可扩展性。但既然前人已经给我们总结出了经验,我们何不踩着前人的肩膀前进?
三、XML。现在的系统中不使用XML几乎是不可能的。XML的功能非常强大,它可以做数据转换、做系统的配置、甚至可保存您的系统业务数据。因此您必须了解XML,包括它的语法,结构。您还需要比较熟练的使用解析XML的一些API,比如JDOM,SAX等,因为在我们一般的项目中,XML往往担当系统配置信息的作用,您需要用这些API解析这些配置信息,开发完美的项目。
四、精通使用一种或两种框架。像在《如何成为java初级程序员》中提到的那样,“框架都会有许多可重用的代码,良好的层次关系和业务控制逻辑,基于框架的开发使你可以省出很多的开发成本”。但我这里希望您能精通,更多的是希望您能通过框架的使用了解框架的思想。这样您在开发一个项目时思路会开阔一些,比如您会想到把SQL语句与您的JAVA代码分开,再比如您会考虑把您的业务逻辑配置到XML或者数据库中,这样整个项目就很容易扩张了。
五、熟悉主流数据库。其实真正比较大的项目都是有人专门做数据库的,但往往很多项目要求作为(高级)工程师的您也参与数据库的设计以及SQL的编写。所以为了更好的为国家做贡献,建议您还是多了解一些主流数据库,比如SQLSERVER,ORACLE,多连接SQL和存储过程以及触发器。如果您不是“科班”出身,您还需要补充一些数据库原理方面的知识。
六、精通一种或两种WEBServer。尽管我再《如何成为java初级程序员》里讲过它,我还是要强调您要精通一种或两种。因为作为JAVA工程师,特别时想成为高级JAVA工程师的您,您不可避免地要部署您的项目到WebServer上,而且只有当您精通一种WebServer,您才可能最大限度地使用它的资源,这往往可以节省很多时间和精力。
七、UML。我知道您肯定想成为高级工程师,因此您有必要了解或熟练或精通UML,这取决于您有多大决心想成为高级工程师和项目经理。在比较正规的开发团队中,UML是讨论项目的交流工具,您要想做一个软件工程师,您至少要能看懂,您要想做高级工程师,您要能通过它来描述您对项目的理解,尽管这不是必须,但却很重要。
八、站在高度分析问题:这不是一个知识点,也不是通过书本就能学得到的。只所以提到这一点,是因为我比您还着急,我希望您更快的成为一个高级的软件工程师,而不是一个一般的软件工程师。希望您在工作中多向您的系统分析员、需求分析员、系统设计员学习,多站在他们角度上去看您在开发的项目。在最好在项目之初先在您的脑海里对项目有个大致的分析、设计,然后和他们进行比较,找找差别,想想缺点。
九、工具。与在《如何成为java初级程序员》里提到的不同,您在这个阶段可能接触到不同的工具了,尽管您还需要使用JB或者IDEA,但能可能对ROSE,Together要多了解一些,因为您要画UML了。不要再对Dreamweaver等HTML编辑器情有独钟了,那些JSP页面让初级程序员去写吧。

⑶ java解析XML字符串

你这种写法标签都已经关闭了,当然用getText()获取不到标签内的文本节点的值了.
注意,<a/> 这个标签已经关闭了.你要获取它后面的值,只能通过<p>节点来遍历了,
解决方法:<a value="a1" /> ,另外如果没解决,最好把源代码发下来看下

⑷ 请问谁知道Java中如何解析XML文件

解析一个XML文件有四种方式:DOM 、JDOM、SAX 、DOM4J 。我以DOM解析方式来简单说明下。
首先,我们先导入所需要的包:
import javax.xml.DocumentBuilderFactory; //用来创建解析器工厂
import javax.xml.DocumentBuilder; //解析器对象
import org.w3c.dom.Document; //Document类实现了W3C组织定义的接口规范。
import org.w3c.dom.NodeList; //节点列表类要导入的包,它也是W3C组织下的类。
DocumentBuilderFactory类是一个抽象类,不能直接实例化,但该类提供了一个newInstance方法,我们使用该方法先获得一个新的实例对象factory:
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
接着,我们从解析器工厂获取解析器对象:
DocumentBuilder builder = factory.newDocumentBuilder();
这时,可以调用DocumentBuilder对象的parse方法,它会返回一个新的DOM文档对象:
Document doc = builder.parse(“http://services.explorecalifornia.org/rss/tours.php”);
这里parse方法将给定的URI的内容当作XML文档来分析,最后形成一个树状对象集合。这样我们就可以使用doc对象来获取文档中的内容了。如:
NodeList list = doc.getElementsByTagName(“title”);
getElementsByTagName方法可以根据标签名获取元素节点集合。调用该方法并传入标签名“title”作为参数,能获取到所有“title”元素的集合。
用DOM解析XML大体步骤如上,如果你还有不明白的,可以上秒秒学了解下。

⑸ 在java中解析xml有哪几种方法

1、JDOM生成和解析XML
为减少DOM、SAX的编码量,出现了JDOM
优点:20-80原则,极大减少了代码量。
使用场合:要实现的功能简单,如解析、创建等,但在底层,JDOM还是使用SAX(最常用)、DOM、Xanan文档。
2、SAX生成和解析XML文档
为解决DOM的问题,出现了SAX,SAX 事件驱动。当解析器发现元素开始、元素结束、文本、文档的开始或结束等时发送事件,程序员编写响应这些事件的代码,保存数据。
优点:不用事先调入整个文档,占用资源少。SAX解析器代码比DOM解析器代码小,适于Applet下载。
缺点:不是持久的,事件过后若没保存数据,那么数据就丢了。无状态性,从事件中只能得到文本,但不知该文本属于哪个元素。
使用场合:Applet。只需XML文档的少量内容,很少回头访问,机器内存少。
3、DOM生成和解析XML文档
为XML文档的已解析版本定义了一组接口。解析器读入整个文档,然后构建一个驻留内存的树结构,然后代码就可以使用 DOM 接口来操作这个树结构。
优点:整个文档树在内存中,便于操作,支持删除、修改、重新排列等多种功能。
缺点:将整个文档调入内存(包括无用的节点),浪费时间和空间。
使用场合:一旦解析了文档还需多次访问这些数据,硬件资源充足(内存、CPU)。
4、DOM4J生成和解析XML文档
DOM4J
是一个非常非常优秀的Java XML
API,具有性能优异、功能强大和极端易用使用的特点,同时它也是一个开放源代码的软件。如今你可以看到越来越多的 Java 软件都在使用 DOM4J
来读写 XML,特别值得一提的是连 Sun 的 JAXM 也在用 DOM4J。

⑹ 请教如何用JAVA解析含有双引号的XML字符

存储含有双引号的字符串要用到转义字符

例如字符串为: 含有双引号""的字符串

在这其中,当出现转义字符 的时候,其后面的双引号 " 不会作为字符串的判定标志,而是以字符串本身的内容被写入到这个字符串中

⑺ Java解析XML字符串

使用第三发组件,我用的是dom4j.jar
代码如下:
import java.io.File;
import java.util.Iterator;
import java.util.List;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

public class TestArray{
private File file;
public TestArray(File file){
this.file=file;
}
public void read() throws DocumentException{
//获得解析器
SAXReader sr = new SAXReader();
//解析xml文件
Document doc = sr.read(file);
//获得xml根元素
Element root = doc.getRootElement();
//获得根元素迭代器
Iterator<Element> ir = root.elementIterator();
//迭代根元素,看根元素下有哪些其他元素
while (ir.hasNext()) {
//第一个元素
Element element = (Element) ir.next();
//判断是哪个元素,方法应该没用错,错了就不好意思了
if(element.getName().equals("flag")){
//获取此元素属性值
String code = element.attributeValue("code");
String msg = element.attributeValue("msg");
}else{
String totalCount = element.attributeValue("totalCount");
Iterator<Element> ir1 = element.elementIterator();
//如果此元素下还有别的元素,则继续迭代
while(ir1.hasNext()){
Element commentary = (Element) ir1.next();
String type = commentary.attributeValue("type");
}
}
}
}
}

⑻ java xml格式字符串解析

package test;

import java.io.File;
import java.io.IOException;
import java.util.List;

import org.jdom2.Document;
import org.jdom2.Element;
import org.jdom2.JDOMException;
import org.jdom2.input.SAXBuilder;

/**
* 使用JDOM实现XML解析,jar包:jdom-2.0.5.jar
* @author zhurongfu
*
*/
public class JdomTest {
public static void parseXml (File file) throws JDOMException, IOException{

SAXBuilder sax = new SAXBuilder();
Document doc = sax.build(file);
Element root = doc.getRootElement();

parseElement(root);
}

private static void parseElement(Element element) {
// TODO Auto-generated method stub
List<Element> elementList = element.getChildren();
for(Element e:elementList){
if(e.getChildren().size() > 0){
parseElement(e);
}else {
String elementName = e.getName();
if("id".equals(elementName)){
System.out.println("a的值为:"+e.getValue());
}else if("destaddr".equals(elementName)) {
System.out.println("b的值为:"+e.getValue());
}else if("status".equals(elementName)){
System.out.println("c的值为:"+e.getValue());
}
}
}
}

public static void main(String[] args) throws JDOMException, IOException {
// TODO Auto-generated method stub
File file = new File("test.xml");
parseXml(file);
}

}

⑼ java解析xml有几种方法

DOM(Document Object Model)解析
优点
允许应用程序对数据和结构做出更改
访问是双向的,可以在任何时候在树中上、下导航获取、操作任意部分的数据
缺点
解析XML文档的需要加载整个文档来构造层次结构,消耗内存资源大。
应用范围
遍历能力强,常应用于XML文档需要频繁改变的服务中。
解析步骤
创建一个 DocumentBuilderFactory 对象
创建一个 DocumentBuilder 对象
通过 DocumentBuilder 的 parse() 方法加载 XML 到当前工程目录下
通过 getElementsByTagName() 方法获取所有 XML 所有节点的集合
遍历所有节点
通过 item() 方法获取某个节点的属性
通过 getNodeName() 和 getNodeValue() 方法获取属性名和属性值
通过 getChildNodes() 方法获取子节点,并遍历所有子节点
通过 getNodeName() 和 getTextContent() 方法获取子节点名称和子节点值
package Paint;

import java.io.IOException;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;

import org.w3c.dom.Document;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;

public class DOMTest {
public static void main(String[] args) {
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
try {
DocumentBuilder db = dbf.newDocumentBuilder();
Document document = db.parse("./src/Paint/hello.xml");
NodeList bookList = document.getElementsByTagName("book"); //节点集

int bookCnt = bookList.getLength();
System.err.println("一共获取到" + bookCnt +"本书");

for(int i=0; i Node book = bookList.item(i);
NamedNodeMap attrs = book.getAttributes();
for(int j=0; j Node attr = attrs.item(j);
System.err.println(attr.getNodeName()+"---"+attr.getNodeValue());//id

}

NodeList childNodes = book.getChildNodes();
for(int k=0; k if(childNodes.item(k).getNodeType() == Node.ELEMENT_NODE){
System.out.println(childNodes.item(k).getNodeName()+"---" + childNodes.item(k).getTextContent());
}
}
}
} catch (ParserConfigurationException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}

SAX(Simple API for XML)解析
优点
不需要等待所有的数据被处理,解析就可以开始
只在读取数据时检查数据,不需要保存在内存中
可以在某一个条件满足时停止解析,不必要解析整个文档
效率和性能较高,能解析大于系统内存的文档
缺点
解析逻辑复杂,需要应用层自己负责逻辑处理,文档越复杂程序越复杂
单向导航,无法定位文档层次,很难同时同时访问同一文档的不同部分数据,不支持 XPath
解析步骤
获取一个 SAXParserFactory 的实例
通过 factory() 获取 SAXParser 实例
创建一个 handler() 对象
通过 parser 的 parse() 方法来解析 XML
SAXTest.java
package Paint;

import java.io.IOException;

import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;

import org.xml.sax.SAXException;

public class SAXTest {

public static void main(String[] args) {
// 获取实例
SAXParserFactory factory = SAXParserFactory.newInstance();
try {
SAXParser parser = factory.newSAXParser();
SAXParserHandler handler = new SAXParserHandler();
parser.parse("./src/Paint/hello.xml", handler);

System.err.println("共有"+ handler.getBookList().size()+ "本书");
for(Book book : handler.getBookList()){
System.out.println(book.getName());
System.out.println("id=" + book.getId());
System.out.println(book.getAuthor());
System.out.println(book.getYear());
System.out.println(book.getPrice());
System.out.println(book.getLanguage());
}
} catch (ParserConfigurationException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}

SAXParserHandler.java
package Paint;

import java.util.ArrayList;

import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;

public class SAXParserHandler extends DefaultHandler {
String value = null;
Book book = null;
private ArrayList bookList = new ArrayList();

public ArrayList getBookList() {
return bookList;
}
/*
* XML 解析开始
*/
public void startDocument() throws SAXException {
super.startDocument();
System.out.println("xml 解析开始");
}

/*
* XML 解析结束
*/
public void endDocument() throws SAXException {
super.endDocument();
System.out.println("xml 解析结束");
}

/*
* 解析 XML 元素开始
*/
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {

super.startElement(uri, localName, qName, attributes);

if(qName.equals("book")){
book = new Book();

for(int i=0; i System.out.println(attributes.getQName(i)+"---"+attributes.getValue(i));
if(attributes.getQName(i).equals("id")){
book.setId(attributes.getValue(i));
}
}
}else if(!qName.equals("bookstore")){
System.out.print("节点名:"+ qName + "---");
}
}

/*
*解析 XML 元素结束
*/
public void endElement(String uri, String localName, String qName)
throws SAXException {

super.endElement(uri, localName, qName);
if(qName.equals("book")){
bookList.add(book);
book = null;
}
else if(qName.equals("name")){
book.setName(value);
}else if(qName.equals("year")){
book.setYear(value);
}else if(qName.equals("author")){
book.setAuthor(value);
}else if(qName.equals("price")){
book.setPrice(value);
}else if(qName.equals("language")){
book.setLanguage(value);
}
}

public void characters(char[] ch, int start, int length)
throws SAXException {
super.characters(ch, start, length);

// 获取节点值数组
value = new String(ch, start, length);
if(!value.trim().equals("")){
System.out.println("节点值:"+value);
}
}
}

热点内容
照片压缩包 发布:2025-01-16 04:56:56 浏览:742
手机存储用到多少最好 发布:2025-01-16 04:56:19 浏览:781
ftp站点不能启动 发布:2025-01-16 04:55:31 浏览:54
pythonip合法性 发布:2025-01-16 04:48:52 浏览:75
锂电池用3a的充电器是什么配置 发布:2025-01-16 04:26:43 浏览:35
好配置为什么感觉打联盟不流畅 发布:2025-01-16 04:23:02 浏览:900
我的世界java编辑服务器信息 发布:2025-01-16 04:21:42 浏览:507
android拨号上网 发布:2025-01-16 04:13:25 浏览:97
安卓网络编程怎么用 发布:2025-01-16 03:04:45 浏览:899
湖南it服务器怎么样 发布:2025-01-16 03:01:01 浏览:248