`

java-xml

阅读更多
jdk支持java 和xml 打交道,并且方式相当多。下面从两个角度说下java 和 xml的交互形式。

1、xml的解析。
xml的解析大抵有两种方式:
DOM 和 SAX 以及StAX。

DOM:就是基于w3c的DOM模型,在内存中读入一棵xml 的dom模型树结构。
相关api在:org.w3c.dom 包里。

SAX:基于事件解析的xml处理方式,每次遇到xml元素的时候,进行方法回调。
相关的api在:org.xml.sax 包里。

StAX:基于事件的xml解析方式,但是非回调。
相关api在:javax.xml.stream包里。

另外:StAX其实和SAX的处理的方式是一致的,都是基于事件,只是SAX 是push 推的方式,由parse 调用 application的方式,而 StAX 则是相反由application调用parse,这种方式比较好理解,更符合我们程序的调用习惯。

JAXP: 意为Java API for XML Processing。因为 dom 和 sax 有多种实现方式,所以sun又提供了dom 和 sax的 工厂方法,一般建议使用JAXP的工厂方法的形式。
相关api在:javax.xml.parsers 包里。
api有:
   /** dom: jaxp通过下面两个工厂类,创建org.w3c.dom.Document 对象完成对xml的解析和处理。
   */
   javax.xml.parsers.DocumentBuilder;
   javax.xml.parsers.DocumentBuilderFactory;
   org.w3c.dom.Document ;
   /** sax:jaxp通过下面两个工厂类 创建 org.xml.sax.helpers.DefaultHandler进行回调解析完成xml的解析。
   */
   javax.xml.parsers.SAXParser;
   javax.xml.parsers.SAXParserFactory;
   org.xml.sax.helpers.DefaultHandler;


DOM举例:
public static void main(String[] args) throws Exception {
		// Document doc =
		// DocumentBuilderFactoryImpl.newInstance().newDocumentBuilder().newDocument();
		DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
		DocumentBuilder builder = factory.newDocumentBuilder();
		Document doc = builder
				.parse("D:\\qunarProject\\tts_tuan\\src\\test\\java\\com\\qunar\\test\\1.xml");
		NodeList nodeList = doc.getElementsByTagName("data");
		for (int i = 0; i < nodeList.getLength(); i++) {
			Element  ele = (Element)nodeList.item(i);
			NodeList list = ele.getChildNodes();
			for(int j =0;j<list.getLength();j++){
				Node  node = list.item(j);
				System.out.println("-:" + node.getNodeName());
				System.out.println("--:" + node.getTextContent());
			}
		}

	}



SAX举例:
public static void main(String[] args) throws Exception {
		SAXParser parse = SAXParserFactory.newInstance().newSAXParser();
		File f = new File(
				"D:\\qunarProject\\tts_tuan\\src\\test\\java\\com\\qunar\\test\\1.xml");
		parse.parse(f, new DefaultHandler() {
			@Override
			public void startDocument() throws SAXException {
				System.out.println("startDocument");
			}

			@Override
			public void endDocument() throws SAXException {
				System.out.println("endDocument");
			};

			@Override
			public void startElement(String uri, String localName,
					String qName, Attributes attributes) throws SAXException {
				System.out.println(localName);
			}

			@Override
			public void endElement(String uri, String localName, String qName)
					throws SAXException {
				System.out.println(localName);
			}

			@Override
			public void characters(char[] ch, int start, int length)
					throws SAXException {
				System.out.println(new String(ch, start, length));
			}
		});

	}


StAX举例:

<?xml version="1.0" encoding="UTF-8"?>
<data>
	aaa<name>admin</name>bbb
    ccc<password>123456</password>ddd
</data>

  public static void main(String[] args) throws Exception {
		InputStream in = new FileInputStream(
				"D:\\qunarProject\\tts_tuan\\src\\test\\java\\com\\qunar\\test\\1.xml");
		XMLInputFactory factory = XMLInputFactory.newInstance();
		XMLStreamReader parser = factory.createXMLStreamReader(in);
		while (true) {
			int event = parser.next();
			if (event == XMLStreamConstants.END_DOCUMENT) {
				parser.close();
				break;
			} else if (event == XMLStreamConstants.START_ELEMENT) {
				System.out.println(parser.getLocalName());
			} else if (event == XMLStreamConstants.CHARACTERS) {
				System.out.println(parser.getText());
			}else if (event == XMLStreamConstants.END_ELEMENT) {
				System.out.println(parser.getLocalName());
			}
		}
	}


2、xml的数据绑定。
是从java对象POJO和xml数据之间的转换的思路。 从面向对象的角度来处理javabean 和xml 数据的对象关系,在系统中经常使用。
  java提供的工业标准是:JAXB。

举例:

@XmlRootElement(name = "user")
@XmlAccessorType(XmlAccessType.FIELD)
class User{
	@XmlElement(name = "uname")
	private String username;
	@XmlElement(name = "pword")
	private String password;
	public User(String u,String p){
		this.username = u;
		this.password = p;
	}
	public User(){}
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
}

@XmlRootElement(name = "team")
@XmlAccessorType(XmlAccessType.FIELD)
class Team{
	@XmlElementWrapper(name = "userList")
	@XmlElement(name = "user")
	private List<User> userList;
	public List<User> getUserList() {
		return userList;
	}
	public void setUserList(List<User> userList) {
		this.userList = userList;
	}
}

public class JaxbTest {
	public static void main(String[] args) throws Exception {
	 List<User> userList = new ArrayList<User>();
	 for(int i=0;i<2;i++){
		 userList.add(new User("name"+i,"pword"+i));
	 }
	 Team team = new Team();
	 team.setUserList(userList);
     JAXBContext context =  JAXBContext.newInstance(User.class,Team.class);
     Marshaller marshaller= context.createMarshaller();
     marshaller.marshal(team, System.out);
	}
}


输出:
<?xml version="1.0" encoding="utf-8"?>

<team>
  <userList>
    <user>
      <uname>name0</uname>
      <pword>pword0</pword>
    </user>
    <user>
      <uname>name1</uname>
      <pword>pword1</pword>
    </user>
  </userList>
</team>

1
0
分享到:
评论

相关推荐

    Java-xml.rar_XML java_java xml_javaXML.rar_javaxml.r_xml 网站

    此外,"javaxml.r_xml"和"javaxml.r"标签可能指的是Java的JAXB框架,这是一个用于XML绑定的Java标准,可以自动将Java对象映射为XML文档,反之亦然。这大大简化了处理XML数据的过程,尤其是在构建Web服务或需要与XML...

    java-xml.zip_xml;源代码;

    Java编程语言与XML(eXtensible Markup Language)的结合是软件开发中的重要部分,尤其在数据交换、配置存储和文档处理等领域。本资源“java-xml.zip”包含了一组关于Java处理XML的源代码示例,对于学习和理解如何在...

    java-xml解析2

    ### Java XML 解析知识点 #### 一、Java XML 解析简介 在计算机科学领域,XML (Extensible Markup Language) 是一种被广泛使用的标记语言,它主要用于数据存储与传输。Java 提供了多种方法来解析 XML 文件,这在...

    Java-XML-programming-examples.rar_java programming

    本压缩包文件“Java-XML-programming-examples.rar”显然提供了关于Java与XML结合使用的实际编程示例,有助于深入理解这一技术。 在Java中,处理XML主要涉及以下几个核心知识点: 1. **DOM解析**:DOM(文档对象...

    java-xml自动生成对象实体以及与xml相互转化.zip_Java doc转xml_java xml 转 实体_java 毕

    Java XML技术是软件开发中一个重要的领域,尤其是在处理数据交换和序列化时。XML(Extensible Markup Language)因其结构清晰、可读性强的特点,被广泛应用于配置文件、数据传输和存储等方面。Java作为一种多用途的...

    intellij-java-google-style.xml

    intellij-java-google-style.xml 提供给intellij-idea的代码格式化模板,代码更加整洁,提升团队合作效率

    javaapi源码文档-java-xml-tool:这个Java项目说明了Java提供的XMLAPI的用法:解析和验证XML文档,执行XSL转

    API文档java-xml-tool 这个Java项目说明了Java提供的XML API的用法: 解析和验证XML文档, 执行XSL转换 使用来自XML源的JPA填充数据库。 要求 JDK 1.8 Java项目管理工具maven ,(我使用版本3.5.2): 软件版本控制...

    java-xml基础

    可扩展标记语言 (Extensible Markup Language, XML) ,用于标记电子文件使其具有结构性的标记语言,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。 XML是标准通用标记语言 ...

    java-xml驱动包.zip

    Java XML驱动包主要包含了处理XML文档的一系列库,这些库在开发中经常用于解析、创建、操作和转换XML数据。本压缩包中的四个文件——dom4j-1.6.1.jar、jaxen-1.1-beta-7.jar、jdom-1.1.jar和sax-2.0.1.jar,都是Java...

    Java-XML-GuiBuilder-开源

    Java-XML-GuiBuilder是一个开源项目,专门设计用于利用XML文档来构建可执行的Java Swing界面。这个工具的出现主要是为了提升开发效率,特别是在进行快速原型制作、用户界面的规格设定与文档化方面。Swing是Java的一...

    java使用DocumentBuilderFactory和DocumentBuilder来读取和解析XML文件java-xml

    例子中首先创建了一个...接着,我们使用parse方法解析了一个名为example.xml的XML文件。之后,我们通过获取根元素并遍历其子元素来读取XML文件内容。请根据实际的XML结构和需求调整"List"以及其他代码

    基于java的开发源码-XML写的RSS阅读器.zip

    基于java的开发源码-XML写的RSS阅读器.zip 基于java的开发源码-XML写的RSS阅读器.zip 基于java的开发源码-XML写的RSS阅读器.zip 基于java的开发源码-XML写的RSS阅读器.zip 基于java的开发源码-XML写的RSS阅读器.zip ...

    simple-xml jar包

    通过注解,开发者可以轻松地将Java对象与XML结构进行绑定,使得XML数据的读取和写入变得非常直观。 ### 2. 安装Simple-XML 在项目中使用Simple-XML,首先需要将其作为依赖添加到构建工具中。如果你使用的是Maven,...

    jcommon-xml-1.0.13.jar

    《深入解析jcommon-xml-1.0.13.jar:Java XML处理的基石》 在Java编程领域,XML(eXtensible Markup Language)作为一种数据交换格式,被广泛应用于各种系统之间的通信和数据存储。为了更好地处理XML文档,开发者...

    simple-xml-2.7.1

    5. **文档和示例**:下载的Simple-XML-2.7.1压缩包包含了所需的jar文件,供开发者直接引入项目使用。同时,附带的doc文件提供了详细API文档,帮助开发者快速理解和掌握库的使用方法。还有demo示例代码,展示如何实现...

    Java-XML:Java - Eclipse IDE 4.2.2

    在"Java-XML-master"这个压缩包中,可能包含了Java XML处理的各种示例代码,涵盖DOM、SAX、StAX以及Eclipse IDE的使用方法。这些示例可以帮助初学者快速掌握Java与XML的交互,了解如何在实际项目中应用这些技术。...

    simple-xml-2.6.2.jar

    simple-xml-2.6.2.jar主要用于模拟报文的类库,有需要的可以下载

    javax-xml-soap-1.6.0.jar

    【标题】"javax-xml-soap-1.6.0.jar" 是一个Java库,它包含了Java XML(JSR 109)的SOAP(Simple Object Access Protocol)API的实现。这个版本是1.6.0,用于处理XML SOAP消息。 【描述】"javax-xml-soap-1.6.0.jar...

    castor-0.9.5.3-xml.jar

    castor-0.9.5.3-xml.jar,java和xml互相转换所使用的JAR

    vtd-xml-2.6-java-src.rar_VTD-XML_www.vtd2cn_断词

    VTD-XML 是一种基于 Java* 的新型开放源代码 XML 处理 API,能够解决当前 XML 处理模型的许多问题。此方案目前属于 Sourceforge* 一部分,可在此处*找到。通过本演示*,您将熟悉这些基本的概念。仅凭这一点,我们还...

Global site tag (gtag.js) - Google Analytics