`
raymond.chen
  • 浏览: 1426510 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

用saxon框架对xml数据进行过滤

    博客分类:
  • Java
 
阅读更多

Saxon 是一个 XSLT 和XQuery处理器。它是使用 XML 文档和样式表作为输入,然后生成结果文档作为输出的程序,它还包括了一个串行化器,用于将结果树转换成 XML、HTML 或纯文本。

 

 Saxon8以上版本主要组成有:XSLT 2.0处理器、 XPath 2.0处理器、 XQuery 1.0处理器、XML Schema 1.0处理器。

 

XPath 教程: http://www.w3school.com.cn/xpath/index.asp

XQuery 教程:http://www.w3school.com.cn/xquery/index.asp

 

 以下范例代码在saxonb9-1-0-8j包下测试通过:

 

1、xml文档内容

<?xml version="1.0" encoding="UTF-8"?>
<flight>
	<row flightno="CA3411" airline_code="CA" airline_namecn="中国国际航空公司" airline_nameen="Air China" city_code="SHA" city_namecn="上海虹桥" city_nameen="Shanghai" flight_date="20130202" flight_time="2200" status_code="cancel" status_namecn="取消" status_nameen="Cancel" checkin_counter="M2-3" gate="A118"/>
	<row flightno="CA3411" airline_code="CA" airline_namecn="中国国际航空公司" airline_nameen="Air China" city_code="SHA" city_namecn="上海虹桥" city_nameen="Shanghai" flight_date="20130202" flight_time="2300" status_code="fly" status_namecn="起飞" status_nameen="Fly" checkin_counter="M2-3" gate="A118"/>
	<row flightno="CZ3412" airline_code="CZ" airline_namecn="中国南方航空公司" airline_nameen="South Air" city_code="PEK" city_namecn="北京" city_nameen="Beijing" flight_date="20130203" flight_time="2200" status_code="fly" status_namecn="起飞" status_nameen="Fly" checkin_counter="M1-3" gate="A218"/>
</flight>

 

2、java源码

public class Test2 {
	public static void main(String[] args) {
		try{
			DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
			DocumentBuilder builder = builderFactory.newDocumentBuilder();
			
			//从文档中加载xml内容
			InputStream in = Class.class.getResourceAsStream("/flight/flight_data.xml");
			Document document = builder.parse(in);
			document.normalize(); //去掉XML文档中空白部分
			
			//从字符串中加载xml内容
			//StringReader sr = new StringReader("<flight><row flightno=\"CA3411\" airline_code=\"CA\" airline_namecn=\"中国国际航空公司\" airline_nameen=\"Air China\" city_code=\"SHA\" city_namecn=\"上海虹桥\" city_nameen=\"Shanghai\" flight_date=\"20130202\" flight_time=\"2300\" status_code=\"fly\" status_namecn=\"起飞\" status_nameen=\"Fly\" checkin_counter=\"M2-3\" gate=\"A118\"/></flight>");
			//InputSource is = new InputSource(sr);
			//Document document = builder.parse(is);
			//document.normalize(); //去掉XML文档中空白部分
			
			//xQuery表达式
			StringBuffer sb = new StringBuffer();
			sb.append(" for $s in /flight/row where 1=1 ");
			sb.append(" and contains(upper-case($s/@flightno), 'CA') ");
			sb.append(" and contains(upper-case($s/@city_namecn), '海') ");
			sb.append(" and upper-case($s/@airline_code)='CA' ");
			sb.append(" and $s/@flight_date='20130202' ");
			sb.append(" and $s/@flight_time>='2300' ");
			sb.append(" and $s/@flight_time<='2300' ");
			sb.append(" and $s/@status_code='fly' ");
			sb.append(" return $s ");
			
			Configuration configuration = new Configuration();
			
			//静态查询上下文
			StaticQueryContext context = new StaticQueryContext(configuration);
			XQueryExpression expression = context.compileQuery(sb.toString());
			
			//动态查询上下文
			DynamicQueryContext context2 = new DynamicQueryContext(configuration);  
			context2.setContextItem(new DocumentWrapper(document, null, configuration));
			
			Properties props = new Properties();
			props.setProperty(OutputKeys.METHOD, "xml");
			props.setProperty(OutputKeys.INDENT, "yes");
			props.setProperty(OutputKeys.ENCODING, "GBK");
			props.setProperty(OutputKeys.VERSION, "1.0");
			
			//根据xQuery表达式解析xml文件,返回符合条件的数据,存储到writer对象
			Writer writer = new StringWriter();
			expression.run(context2, new StreamResult(writer), props);
			
			System.out.println(writer.toString());
			
		}catch(Exception ex){
			ex.printStackTrace();
		}
	}
}

  

3、输出结果

<?xml version="1.0" encoding="GBK"?>
<row airline_code="CA" airline_namecn="中国国际航空公司" airline_nameen="Air China"
     checkin_counter="M2-3"
     city_code="SHA"
     city_namecn="上海虹桥"
     city_nameen="Shanghai"
     flight_date="20130202"
     flight_time="2300"
     flightno="CA3411"
     gate="A118"
     status_code="fly"
     status_namecn="起飞"
     status_nameen="Fly"/>

 

分享到:
评论
1 楼 liutingna86 2015-01-31  
修改配置成功,谢谢分享

相关推荐

    java解析XML saxon9

    `saxon9-sql.jar`暗示了Saxon9对于XML与SQL集成的支持,这使得可以直接对数据库执行XSLT转换。`notices`文件可能包含许可和版权信息,而`doc`文件夹可能包含Saxon9的文档,对于理解和使用库非常有帮助。 使用Saxon9...

    基於saxon的java和xquery例程

    在"mysaxon"这个压缩包中,可能包含了示例代码、配置文件和测试数据,用于演示如何在Java项目中使用Saxon进行XML处理。通过学习这些示例,你可以更好地理解和应用上述知识点,从而在实际工作中更有效地处理XML数据。...

    saxon的jar包

    saxon框架可用来作为xquery的javaAPI,附件主要包含了的saxon-9.x.jar;saxon-dom-9.x.jar;saxon-xpath-9.x.jar;saxon-xqj-9.x.jar

    基于XML的数据处理基础支撑技术及应用论文

    总结来说,XML作为数据交换的通用格式,结合其相关的标准和技术,如XML Schema、XSLT和XPath,以及Java提供的处理工具,构建了一个强大且灵活的数据处理框架。无论是解析、验证、操作还是转换XML数据,都有成熟的...

    XSLT Programmer‘s Reference, 2nd Edition(Saxon XSLT parser

    《XSLT程序员参考指南,第2版》是关于Saxon XSLT解析器的专业参考资料,这本4.7MB的资源对理解XSLT语言和Saxon解析器的使用至关重要。XSLT(可扩展样式表语言转换)是一种XML语言,用于将XML文档转换为其他格式,如...

    xml课程设计

    设计目的是让学生通过实际操作,掌握XML文档的创建、解析和验证,以及利用XSL进行数据转换。任务主要包括以下几个方面: 1. 创建XML文档:定义符合XML规范的数据结构,用于存储CD信息。 2. 设计XML模式(Schema):...

    《XML与Web 数据管理》习题

    在实践中,创建、验证XML文档,编写DTD和XML Schema,使用XPath表达式选取数据,以及用XSLT进行数据转换,都是提升技能的关键步骤。这些知识点在现代Web应用程序、数据交换和文档处理中发挥着重要作用。

    Java&XML.rar_XML java_xml

    8. **Spring框架**:在Java企业级开发中,Spring框架广泛使用XML配置文件来管理bean的依赖注入,提供服务定位和配置。 这个项目适合初学者,因为它提供了实际应用Java与XML的示例。通过学习和理解MainFrame的代码,...

    SaxonHE9-9-1-6J.zip

    标题"SaxonHE9-9-1-6J....例如,可以使用XPath来定位XML文档中的特定元素,用XSLT将XML转换成HTML或其他格式,或者使用XQuery直接从XML数据中提取所需信息。Saxon的高性能和灵活性使其成为Java XML处理的标准选择之一。

    saxonb9-1-0-8j.zip

    Saxon的这一实现意味着开发者可以利用其强大的功能来处理复杂的XML结构,进行数据查询、分析和转换。 接下来我们详细探讨一下Saxon的各个组件: 1. **saxon9.jar**:这是Saxon的基础库,包含了XSLT 2.0和3.0、...

    saxon-8.7.jar&testng;-results.xsl

    接着,我们可以使用`saxon-8.7.jar`这个工具,结合`testng-results.xsl`样式表,对XML结果进行转换。命令行操作可能如下: ```bash java -jar saxon-8.7.jar -s:testng-results.xml -xsl:testng-results.xsl -o:...

    从XML生成可与Ajax共同使用的JSON.doc

    4. 使用XSLT V2语言和Saxon XSLT V2处理器从XML数据生成JSON的技巧:使用XSLT V2语言和Saxon XSLT V2处理器可以将XML数据生成JSON,满足数据驱动的Web应用程序对互动性的需求。这种方式可以使Web应用程序更加灵活、...

    基于XML的自动化异构系统数据一致性校验方法.rar

    可以使用XML比较工具,如XML Diff或Saxon等,它们可以高亮显示数据的差异。 6. **报告与修复**:生成详细的报告,列出所有的不一致项,然后根据业务规则决定如何修复这些不一致。修复可能涉及更新源系统数据、修正...

    saxon9-dom.jar

    Files contained in saxon9-dom.jar: META-INF/MANIFEST.MF net.sf.saxon.dom.AttrOverNodeInfo.class net.sf.saxon.dom.DOMAttributeMap.class net.sf.saxon.dom.DOMEnvelope.class ...

    xml网页实例

    - 文档声明(Document Type Declaration, DTD):可选,用于定义文档的结构和规则,但现代XML更倾向于使用XML Schema或XSD。 - XML声明:`&lt;?xml version="1.0" encoding="UTF-8"?&gt;`,指定XML版本和字符编码。 - ...

    XML+XSL/FO生成PDF文件Demo

    3. **应用XSLT转换**:使用XSLT处理器(如Saxon或Xalan)将XML文件和XSLT样式表结合,生成XSL-FO格式的中间文件。这个过程就是所谓的“转换”。 4. **使用FOP生成PDF**:最后,FOP插件读取XSL-FO文件,根据其中的...

    用XSL把XML转化在EXCEL导出

    3. XSLT转换:使用XSLT处理器(如Saxon或Xalan)对XML和XSL进行解析和转换。 4. 输出Excel:转换后的结果通常为一个临时的HTML或XML文件,可以被浏览器或专门的工具识别并呈现为Excel格式。 5. 反台处理:服务器端的...

    用xml 和 xsl 实现二维报表

    在实际应用中,我们可以使用各种编程语言(如Java、Python、PHP等)的库或工具来生成XML文件,然后使用XSLT处理器(如Saxon、Xalan等)进行转换。对于Web应用,服务器端通常负责XML和XSL的处理,生成HTML后发送给...

    xslt模板转换,xml数据和模板

    在"XSLT模板转换,XML数据和模板"这个主题中,我们主要会学习以下知识点: 1. **XSLT基础**:理解XSLT的基本语法,包括元素、属性、模板、变量和模式。XSLT文档由多个模板组成,每个模板都有一个模式,用于匹配XML...

Global site tag (gtag.js) - Google Analytics