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"/>
相关推荐
`saxon9-sql.jar`暗示了Saxon9对于XML与SQL集成的支持,这使得可以直接对数据库执行XSLT转换。`notices`文件可能包含许可和版权信息,而`doc`文件夹可能包含Saxon9的文档,对于理解和使用库非常有帮助。 使用Saxon9...
在"mysaxon"这个压缩包中,可能包含了示例代码、配置文件和测试数据,用于演示如何在Java项目中使用Saxon进行XML处理。通过学习这些示例,你可以更好地理解和应用上述知识点,从而在实际工作中更有效地处理XML数据。...
saxon框架可用来作为xquery的javaAPI,附件主要包含了的saxon-9.x.jar;saxon-dom-9.x.jar;saxon-xpath-9.x.jar;saxon-xqj-9.x.jar
总结来说,XML作为数据交换的通用格式,结合其相关的标准和技术,如XML Schema、XSLT和XPath,以及Java提供的处理工具,构建了一个强大且灵活的数据处理框架。无论是解析、验证、操作还是转换XML数据,都有成熟的...
《XSLT程序员参考指南,第2版》是关于Saxon XSLT解析器的专业参考资料,这本4.7MB的资源对理解XSLT语言和Saxon解析器的使用至关重要。XSLT(可扩展样式表语言转换)是一种XML语言,用于将XML文档转换为其他格式,如...
设计目的是让学生通过实际操作,掌握XML文档的创建、解析和验证,以及利用XSL进行数据转换。任务主要包括以下几个方面: 1. 创建XML文档:定义符合XML规范的数据结构,用于存储CD信息。 2. 设计XML模式(Schema):...
在实践中,创建、验证XML文档,编写DTD和XML Schema,使用XPath表达式选取数据,以及用XSLT进行数据转换,都是提升技能的关键步骤。这些知识点在现代Web应用程序、数据交换和文档处理中发挥着重要作用。
接着,我们可以使用`saxon-8.7.jar`这个工具,结合`testng-results.xsl`样式表,对XML结果进行转换。命令行操作可能如下: ```bash java -jar saxon-8.7.jar -s:testng-results.xml -xsl:testng-results.xsl -o:...
8. **Spring框架**:在Java企业级开发中,Spring框架广泛使用XML配置文件来管理bean的依赖注入,提供服务定位和配置。 这个项目适合初学者,因为它提供了实际应用Java与XML的示例。通过学习和理解MainFrame的代码,...
标题"SaxonHE9-9-1-6J....例如,可以使用XPath来定位XML文档中的特定元素,用XSLT将XML转换成HTML或其他格式,或者使用XQuery直接从XML数据中提取所需信息。Saxon的高性能和灵活性使其成为Java XML处理的标准选择之一。
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 ...
Saxon的这一实现意味着开发者可以利用其强大的功能来处理复杂的XML结构,进行数据查询、分析和转换。 接下来我们详细探讨一下Saxon的各个组件: 1. **saxon9.jar**:这是Saxon的基础库,包含了XSLT 2.0和3.0、...
微软的MSXML Binary XML Format则是在.NET框架中为XML数据提供的一种私有二进制格式,优化了XML数据的序列化和反序列化。 二进制XML的优势在于: 1. **存储空间优化**:通过压缩技术,二进制XML可以显著减小文档的...
4. 使用XSLT V2语言和Saxon XSLT V2处理器从XML数据生成JSON的技巧:使用XSLT V2语言和Saxon XSLT V2处理器可以将XML数据生成JSON,满足数据驱动的Web应用程序对互动性的需求。这种方式可以使Web应用程序更加灵活、...
可以使用XML比较工具,如XML Diff或Saxon等,它们可以高亮显示数据的差异。 6. **报告与修复**:生成详细的报告,列出所有的不一致项,然后根据业务规则决定如何修复这些不一致。修复可能涉及更新源系统数据、修正...
- 文档声明(Document Type Declaration, DTD):可选,用于定义文档的结构和规则,但现代XML更倾向于使用XML Schema或XSD。 - XML声明:`<?xml version="1.0" encoding="UTF-8"?>`,指定XML版本和字符编码。 - ...
3. XSLT转换:使用XSLT处理器(如Saxon或Xalan)对XML和XSL进行解析和转换。 4. 输出Excel:转换后的结果通常为一个临时的HTML或XML文件,可以被浏览器或专门的工具识别并呈现为Excel格式。 5. 反台处理:服务器端的...
在实际应用中,我们可以使用各种编程语言(如Java、Python、PHP等)的库或工具来生成XML文件,然后使用XSLT处理器(如Saxon、Xalan等)进行转换。对于Web应用,服务器端通常负责XML和XSL的处理,生成HTML后发送给...