如何用XSL对XML的数据进行按节点排序?

今天工作当中,遇到一个问题,XML的Schema文件中定义的complexType是一个Sequence,这就要求符合这个Schema定义的XML的数据节点,必须要按照Schema中Sequence定义的顺序出现(etag-->id-->kind-->selfLink-->title-->updated),否则Schema校验将会出错。请见下图1和图2, 换句话说,在于XML的数据中节点的出现的顺序和必须和Schema中(节点的顺序是按照节点名字的字母升序排列)定义的顺序一致,否则Schema的校验是通不过的.

图1

图2

那么在这种情况,如何用最少的代码,同时又不引用任何除JDK外的第三方的jar包呢?

答案就是使用XSL技术(http://www.w3schools.com/xsl/) 把XML数据中的节点TaskList节点,按照节点的名字升序排列,这样的话,XML数据和Scheam定义的顺序

就能完全保持一致,Schema的校验就能完全通过。具体的XSL文件和Java代码清单如下,

1. XSL文件如下

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema">

<xsl:output omit-xml-declaration="yes" indent="yes"/>

<xsl:strip-space elements="*"/>

<xsl:template match="node()|@*">

<xsl:copy>

<xsl:apply-templates select="@*">

<xsl:sort select="name()" />

</xsl:apply-templates>

<xsl:apply-templates select="node()">

<xsl:sort select="name()" />

</xsl:apply-templates>

</xsl:copy>

</xsl:template>

</xsl:stylesheet>

2.Java代码如下,

import javax.xml.transform.*;

import javax.xml.transform.stream.StreamResult;

import javax.xml.transform.stream.StreamSource;

public class XSDSequenceElementsSorter {

public static void main(String[] args) {

String dataXML = "c:\test\tasklists_data.xml";

String inputXSL = "c:\test\tasklists_data.xsl";

String outputHTML ="c:\test\tasklists_data_sorted.xml";

try {

TransformerFactory factory = TransformerFactory.newInstance();

StreamSource xslStream = new StreamSource(inputXSL);

Transformer transformer = factory.newTransformer(xslStream);

StreamSource in = new StreamSource(dataXML);

StreamResult out = new StreamResult(outputHTML);

transformer.transform(in, out);

} catch (TransformerConfigurationException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (TransformerException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

如何用XSL对XML的数据进行按节点排序?

时间: 2024-10-12 19:02:15

如何用XSL对XML的数据进行按节点排序?的相关文章

iOS dom解析xml格式数据

问题描述:接口返回的是xml格式数据,而且节点名居然都是相同的,采用了dom解析最终解决 一.文件导入 1.下载GDataXMLNode.h 和 GDataXMLNode.m文件,导入工程(csdn文件下载链接:http://download.csdn.net/detail/wusangtongxue/9502292) 2.配置环境: (1)改成ARC环境(-fno-objc-arc): (2)找到“Paths\Header Search Paths”项,并添加“/usr/include/lib

如何用SQL语句查询Excel数据?

如何用SQL语句查询Excel数据?Q:如何用SQL语句查询Excel数据? A:下列语句可在SQL SERVER中查询Excel工作表中的数据. 2007和2010版本: SELECT*FROMOpenDataSource( 'Microsoft.ACE.OLEDB.12.0', 'Data Source="c:\book1.xlsx";User ID=Admin;Password=;Extended properties=Excel 12.0')...[Sheet1$] 复制代码

ios网络学习------8 xml格式数据的请求处理 用代码块封装

#pragma mark 加载xml - (void)loadXML { //获取网络数据. NSLog(@"load xml"); //从web服务器加载数据 NSString *str = @"http://www.baidu.com?format=xml"; //这里是乱写的 //1简历NSURL NSURL *url = [NSURL URLWithString:str]; //2建立NSURLRequest NSURLRequest *request =

Android之解析XML格式数据

作用:在网络上传输数据时最常用的格式有两种,XML 和 JSON.解析XML格式数据获得与后台交互的信息. 种类: 3种:Pull 解析方式:SAX 解析方式:DOM解析方式. 1.使用Pull解析器解析XML文档Pull解析器的运行方式和SAX解析器很相似,它提供了类似的事件,比如文档开始.文档结束.开始元素和结束元素等.使用parser.next()方法可以进入下一个元素并触发相应的事件.各种事件均已数字的形式被发送,因此可以在程序中使用一个switch语句来对事件进行选择,然后进行相应的事

iOS开发之解析XML格式数据

XML格式的数据是一种数据的传输格式.因为它方便编写.结构清晰,所以深受程序猿的喜爱,非常多人都喜欢使用XML格式数据传输或者作为程序的配置信息. 如今我将来实如今iOS中解析XML格式数据,语言使用Swift. 首先自己写一个简单的XML: <data> <person age="15">zhangsan</person> <person age="2">lisi</person> <person&

R语言XML格式数据导入与处理

数据解析 XML是一种可扩展标记语言,它被设计用来传输和存储数据.XML是各种应用程序之间进行数据传输的最常用的工具.它与Access,Oracle和SQL Server等数据库不同,数据库提供了更强有力的数据存储和分析能力,例如:数据索引.排序.查找.相关一致性等,它仅仅是存储数据.事实上它与其他数据表现形式最大的不同是:它极其简单,这是一个看上去有点琐细的优点,但正是这点使它与众不同. 针对XML格式数据,R语言XML包可以对其进行数据导入与处理,详见下面的案例说明. 案例1 直接输入一段标

Ajax返回xml类型数据

ajax可以返回文本类型数据和xml类型数据,xml是计算机通用语言 可以使用js解析返回xml类型数据的dom对象 前端页面 <!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="Generator" content="EditPlus®"> <meta name=

xml形式数据解析

 import java.io.IOException; import java.io.StringReader; import java.util.List; import org.jdom.Document; import org.jdom.Element; import org.jdom.JDOMException; import org.jdom.Namespace; import org.jdom.input.SAXBuilder; import org.xml.sax.Input

使用HttpClient 发送get、post请求,及其解析xml返回数据

一.关于HttpClient的使用: 可以参考这个博客地址,这里有详细的介绍,需要的可以先看一下: 地址是:http://blog.csdn.net/wangpeng047/article/details/19624529 二.项目中用到HttpClient 去请求一个地址,但是用get请求如果参数过多,不同的浏览器会导致不同程度的参数丢失,所以还应该要有post的请求的方式,在加上post请求方式的后,发现不能用原来解析get请求的方式来解析服务器返回的数据,经多方查找资料最终找到了解决方案,