`
hehaibo
  • 浏览: 416263 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

java JAXP解析XML文件[面试alibaba,问Spring配置文件的解析方式]

阅读更多

1 了解JAXP

JAXP 是Java API for XML Processing的缩写。JAXP API主要的部分在javax.xml.parsers 这个包中。在这个包中,向用户提供了两个最重要的工厂类,SAXParserFactory 和DocumentBuilderFactory,相应地,提供了SAXParser 和DocumentBuilder两个类。

SAX是由XML-DEV定义的;DOM是由W3C定义的。让我们来看看这些API库。

javax.xml.parsers
JAXP API, 定义个SAX和DOM的一个通用接口
org.w3c.dom
定义了DOM中的所有组件

org.xml.sax
定义了SAX的所有API

javax.xml.transform
定义了XSLT API,使用它,你可以将XML转化为一般的可视的页面。
SAX指一种”事件驱动”的处理方式,他对XML文件连续地一个对象一个对象地操作,由于它的这个特点,所以它可以用于服务器端或者对速度有特殊要求的地方。

相比较而言DOM是个使用起来更简单些。他是将所有个XML数据全部读到内存里面,然后使用”树”结构将这些数据组织起来,用户可以对XML的数据进行任意的操作。

<opml version="1.0">
 <head>
  <title>news-新浪rss</title> 
  </head>
 <body>
 <outline title="新闻中心-新浪RSS" text="新闻中心-新浪RSS">
  <outline text="新闻要闻" title="新闻要闻" type="rss" xmlUrl="http://rss.sina.com.cn/news/marquee/ddt.xml" htmlUrl="www.sina.com.cn" /> 
  <outline text="国内要闻" title="国内要闻" type="rss" xmlUrl="http://rss.sina.com.cn/news/china/focus15.xml" htmlUrl="www.sina.com.cn" /> 
  <outline text="国际要闻" title="国际要闻" type="rss" xmlUrl="http://rss.sina.com.cn/news/world/focus15.xml" htmlUrl="www.sina.com.cn" /> 
  <outline text="社会新闻" title="社会新闻" type="rss" xmlUrl="http://rss.sina.com.cn/news/society/focus15.xml" htmlUrl="www.sina.com.cn" /> 
  <outline text="时政要闻" title="时政要闻" type="rss" xmlUrl="http://rss.sina.com.cn/news/china/politics15.xml" htmlUrl="www.sina.com.cn" /> 
  <outline text="港澳台新闻" title="港澳台新闻" type="rss" xmlUrl="http://rss.sina.com.cn/news/china/hktaiwan15.xml" htmlUrl="www.sina.com.cn" /> 
  <outline text="法制要闻" title="法制要闻" type="rss" xmlUrl="http://rss.sina.com.cn/legal/import.xml" htmlUrl="www.sina.com.cn" /> 
  <outline text="社会与法" title="社会与法" type="rss" xmlUrl="http://rss.sina.com.cn/news/society/law15.xml" htmlUrl="www.sina.com.cn" /> 
  <outline text="社会万象" title="社会万象" type="rss" xmlUrl="http://rss.sina.com.cn/news/society/misc15.xml" htmlUrl="www.sina.com.cn" /> 
  <outline text="真情时刻" title="真情时刻" type="rss" xmlUrl="http://rss.sina.com.cn/news/society/feeling15.xml" htmlUrl="www.sina.com.cn" /> 
  <outline text="奇闻轶事" title="奇闻轶事" type="rss" xmlUrl="http://rss.sina.com.cn/news/society/wonder15.xml" htmlUrl="www.sina.com.cn" /> 
  </outline>
  </body>
  </opml>

 

<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" title="XSL Formatting" href="/show_new_final.xsl" media="all"?>
<!--
SINA Corporation (NASDAQ: SINA) is a leading online media company and value-added information service (VAS) provider for China and for Chinese communities worldwide. With a branded network of localized websites targeting Greater China and overseas Chinese, SINA provides services through five major business lines including SINA.com (online news and content), SINA Mobile (mobile value-added services), SINA Online (community-based services and games), SINA.net (search and enterprise services) and SINA E-commerce (online shopping), offering Internet users and government and business clients an array of services including online media and entertainment, online fee-based VAS/wireless VAS, and e-commerce and enterprise e-solutions.
With 230 million registered users worldwide, 450 million daily page views and over 60 million active users for a variety of fee-based services, SINA is the most recognized Internet brand name in China and among Chinese communities globally.
In various surveys and polls, SINA has been recognized as the most valuable brand and the most popular website in China. For 2003 and 2005, SINA was ranked the "Most Preferred Website" in China according to the Chinese Academy of Social Sciences and considered "The Most Respected Chinese Company" for three consecutive years in 2003, 2004 and 2005 by the Economic Observer and the Management Case Study Center of Beijing University. At the same time, South China Weekend in both 2003 and 2004 honored SINA with the prestigious award of the "Chinese Language Medium of the Year."
****[pid:1,tid:60,did:3,fid:1086]****-->
<rss version="2.0">
	<channel>
		<title>
			<![CDATA[新闻要闻-新浪新闻]]>
		</title>
		<image>
			<title>
				<![CDATA[新闻中心]]>
			</title>
			<link>http://news.sina.com.cn</link>
			<url>http://www.sinaimg.cn/home/deco/2009/0330/logo_home_news.gif</url>
		</image>
		<description>
			<![CDATA[新闻中心-新闻要闻]]>
		</description>
		<link>http://roll.news.sina.com.cn/s/</link>
		<language>zh-cn</language>
		<generator>WWW.SINA.COM.CN</generator>
		<ttl>5</ttl>
		<copyright>
			<![CDATA[Copyright 1996 - 2011 SINA Inc. All Rights Reserved]]>
		</copyright>
		<pubDate>Tue, 3 May 2011 07:32:02 GMT</pubDate>
		<category>
			<![CDATA[]]>
		</category>
		<item>
			<title>
				<![CDATA[[财经]收评:沪基指收平 两市传统封基七成下跌(05/03 15:22)]]>
			</title>
			<link>http://go.rss.sina.com.cn/redirect.php?url=http://finance.sina.com.cn/money/fund/20110503/15229784932.shtml</link>
			<author>WWW.SINA.COM.CN</author>
			<guid>http://go.rss.sina.com.cn/redirect.php?url=http://finance.sina.com.cn/money/fund/20110503/15229784932.shtml</guid>
			<category>
				<![CDATA[]]>
			</category>
			<pubDate>Tue, 3 May 2011 07:22:45 GMT</pubDate>
			<comments></comments>
			<description>
				<![CDATA[  新浪财经讯 周一沪深基指低开低走,午后回稳。沪基指报收于4668.33点,与上一交易日收平;深基指报收于5792.28%点,下跌0.18%;股指方面,沪综指报2932.19点,上涨0.71%;深成指报收12423.46点,上涨0.90%。

  两市传统封基七成下跌。基金通乾下跌1.22%,唯一跌幅超1%;....]]>
			</description>
		</item>
</channel>
</rss>

 

 

import java.io.File;
import java.io.InputStream;
import java.net.URL;

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

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
import org.xml.sax.InputSource;

public class TestJAXPParse {
	public static void main(String[] args) throws Throwable {
		String configFile = "java.home" + File.separator +
        "lib" + File.separator + "jaxp.properties";
		File file=new File(configFile);
		System.out.println("解析器配置文件是否存在:"+file.exists());
		//java默认的解析器工厂
		String ps[] = { "javax.xml.parsers.DocumentBuilderFactory",
				"com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl"};
		for (String key : ps) {
			System.out.println(System.getProperty(key));
		}
		System.out.println("创建工厂:");
		DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
		DocumentBuilder docBuilder = factory.newDocumentBuilder();
		Document doc = docBuilder.parse(new InputSource(Thread.currentThread()
				.getContextClassLoader().getResourceAsStream(
						"sina_news_opml.xml")));//http://rss.sina.com.cn/sina_news_opml.xml
		// 获得根元素
		Element root = doc.getDocumentElement();
		System.out.println("根元素名称:"+root.getNodeName());
		NodeList nodeList = doc.getElementsByTagName("outline");
		Element outlineElement = null;
		for (int i = 0; i < nodeList.getLength(); i++) {
			if (nodeList.item(i) instanceof Element) {
				outlineElement = (Element) nodeList.item(i);
				System.out.print("text:" + outlineElement.getAttribute("text"));
				System.out.println(" xmlUrl:"
						+ outlineElement.getAttribute("xmlUrl"));
			}
		}
		//解析远程文件
		parseChannel("http://rss.sina.com.cn/news/marquee/ddt.xml");
	}
	public static void parseChannel(String urlXml) throws Throwable{
		DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
		DocumentBuilder docBuilder = factory.newDocumentBuilder();
		//创建URL
		URL url=new URL(urlXml);
		//打开链接获得输入流
		InputStream is = url.openConnection().getInputStream();

		Document doc = docBuilder.parse(new InputSource(is));
		NodeList nodeList= doc.getElementsByTagName("item");
		Element itemElement =null;
		Element itemChildElement =null;
		for (int i=0;i<nodeList.getLength();i++) {
			if(nodeList.item(i) instanceof Element){
				itemElement =(Element)nodeList.item(i);
				NodeList itemNodeChilds=	itemElement.getChildNodes();
				for (int j = 0; j < itemNodeChilds.getLength(); j++) {
					if(itemNodeChilds.item(j) instanceof Element){
						itemChildElement=(Element) itemNodeChilds.item(j);
						System.out.println(itemChildElement.getTextContent().replaceAll("\\s+", ""));
					}
				}
			}
		}
	}
}
分享到:
评论

相关推荐

    Java解析XML文件的DOM和SAX方式.doc

    在 Java 中使用 DOM 方式解析 XML 文件需要使用 JAXP(Java API for XML Processing),首先需要创建一个解析器工厂,然后使用工厂创建一个具体的解析器对象。然后,使用解析器对象来解析 XML 文件,得到一个 ...

    解析xml文件需要的jar包

    在Java中解析XML文件,通常需要引入特定的库,这些库提供了处理XML的API。"解析xml文件需要的jar包"这个标题指出,我们讨论的是Java环境下解析XML所需的依赖库。 Java中常用的解析XML的库有DOM(Document Object ...

    XML_JAVA指南.rar_WORKING_java Tutorial_java xml_jaxp_xml

    3. 解析XML文档:调用解析器的`parse()`方法,传入XML文件的输入流或URL。 4. 处理解析结果:对于DOM,可以通过`org.w3c.dom.Document`对象访问和修改XML结构;对于SAX,注册事件监听器并响应解析事件。 **JAXP与...

    JAVA高手解析XML配置文件的读取操作

    而SAX解析器采用事件驱动的方式,逐行读取XML文件,只在遇到特定元素时触发回调函数,因此内存占用较小,适合处理大规模的XML文件。 在Java中,JAXP(Java API for XML Processing)是用于处理XML的标准接口,它...

    XML的Jaxp解析示例和简单项目

    以下是一个简单的JAXP解析XML文件的Java代码示例: ```java import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.DocumentBuilder; import org.w3c.dom.Document; import org.w3c.dom....

    使用Java读取XML配置文件

    使用 Java 读取 XML 配置文件 Java 语言和 XML 技术可以说是黄金组合,网上已经有很多文章介绍 ...使用 XML 作为 Java 程序的配置文件可以提高系统的灵活性和可维护性,而使用 SAX 解析器可以高效地读取 XML 文件。

    java解析xml的四种经典方法

    在上述代码中,我们使用了JAXP(Java API for XML Processing)中的`DocumentBuilderFactory`和`DocumentBuilder`来创建并解析XML文件。`getElementsByTagName()`用于获取指定标签的节点列表,然后通过`item()`方法...

    java解析XML的4种经典方法

    Java解析XML的四种经典方法主要涵盖DOM、SAX、StAX和JDOM这四种方式,每种方法都有其独特的优势和适用场景。 1)DOM(JAXP Crimson 解析器) DOM(Document Object Model)是W3C推荐的一种XML解析标准,它将XML...

    Java解析XML文件

    ### Java解析XML文件:DOM与SAX解析技术详解 #### DOM解析:JAXP与Crimson解析器 DOM(Document Object Model),即文档对象模型,是W3C为XML文档定义的一种标准接口,用于在各种编程语言中操作XML文档。DOM将XML...

    java dom 解析 xml 实例

    Java DOM 解析 XML 实例是 Java 语言中常用的 XML 解析方法之一,使用 W3C 推荐的文档对象模型(Document Object Model,DOM)来解析 XML 文档。DOM 提供了一个树形结构的对象模型,通过遍历树形结构可以访问和操作 ...

    java xml文件解析

    在Java中,有多种解析XML文件的方式,包括DOM (Document Object Model)、SAX (Simple API for XML) 和 DOM4J。这些方法各有优势和局限性,选择哪一种取决于具体的应用场景和需求。 #### 二、DOM 解析方式 DOM 解析...

    解析xml,生成java类

    2. SAX解析:SAX(Simple API for XML)是一种事件驱动的解析方式,它不创建完整的文档对象模型,而是按顺序读取XML文件,遇到元素、属性等时触发相应的事件回调。SAX解析适用于处理大型XML文件,因为它占用的内存较...

    使用JAXP之SAX读取XML内容

    JAXP(Java API for XML Processing)是Java平台上的XML处理标准,它提供了包括SAX在内的三种解析方式,即DOM(Document Object Model)、SAX和XSLT。本篇文章将深入探讨如何使用JAXP的SAX解析器来读取XML内容。 ...

    使用JAXP处理XML文件.pdf

    ### 使用JAXP处理XML文件的关键知识点 #### JAXP简介 JAXP(Java API for XML Processing)是Java平台中处理XML文档的标准API之一。它主要包括两大块:DOM(Document Object Model)和SAX(Simple API for XML)。...

    Java中写xml文件

    Java 中编写XML文件涉及到的主要技术是Java API for XML Processing(JAXP),这是一个用于XML文档处理的Java编程接口。JAXP提供了对DOM(Document Object Model)、SAX(Simple API for XML)和XSLT(Extensible ...

    java处理xml文件

    Java处理XML文件是Java开发中的常见任务,XML(Extensible Markup Language)作为一种可扩展标记语言,广泛用于数据交换、配置存储以及文档结构化等场景。本篇将详细讲解Java处理XML的相关知识点,主要涵盖以下几个...

    xml jar 解析xml文件

    在Java开发中,处理XML文件时通常会使用到特定的库,如给定的`xalan.jar`、`xercesImpl.jar`和`xml-apis.jar`。这些是XML解析的重要组成部分,接下来将详细介绍它们的功能和使用。 1. **xalan.jar**:这是Xalan-...

    XML文件解析问题.pdf

    本文对四种主流的 XML 文件解析方案进行了比较,包括 DOM(JAXP Crimson 解析器)、SAX(JAXP Crimson 解析器)、JDOM 和 dom4j。比较的结果表明,DOM 解析方式具有较高的解析速度,但占用较高的内存,而 SAX 解析...

Global site tag (gtag.js) - Google Analytics