- 浏览: 833063 次
- 性别:
- 来自: 厦门
文章分类
- 全部博客 (363)
- 2010年3月 (3)
- 2010年4月 (3)
- Java (116)
- ExtJs (22)
- EJB3.0 (11)
- JQuery (28)
- SqlServer (5)
- Oracle (17)
- hibernate (21)
- struts2 (14)
- php (10)
- JavaScript (11)
- jbpm (6)
- spring (24)
- lucene (2)
- ibatis (7)
- C# (8)
- mysql (11)
- json (3)
- webservice (3)
- 设计模式 (1)
- jdbc (1)
- servlet (2)
- ice (6)
- 日常软件问题 (2)
- 生活 (2)
- iphone (1)
- rest (3)
- ruby (2)
- linux (13)
- quartz (1)
- poi (1)
- redis (13)
- memcached (4)
- nosql (2)
- tomcat调优 (1)
- 项目管理 (0)
最新评论
-
天使建站:
jquery里和数组相关的操作 附带具体的实例 ...
jquery对象数组 -
Cy0941:
$('#formId').form('submit',...) ...
easyui的form表单提交处理 -
shmily2038:
swifth 写道楼主,,你的命令写错啦,,[root@ser ...
centos直接yum安装nginx -
swifth:
楼主,,你的命令写错啦,,[root@server ~]# y ...
centos直接yum安装nginx -
随遇而安DXX:
...
REST
XSL摸板 xml-2-json.xml
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:ebl="urn:ebay:apis:eBLBaseComponents" exclude-result-prefixes="ebl">
<!--====================================================================================
Original version by : Holten Norris ( holtennorris at yahoo.com )
Current version maintained by: Alan Lewis (alanlewis at gmail.com)
Thanks to Venu Reddy from eBay XSLT team for help with the array detection code
Protected by CDDL open source license.
Transforms XML into JavaScript objects, using a JSON format.
===================================================================================== -->
<xsl:output method="text" encoding="UTF-8"/>
<xsl:template match="*">
<xsl:param name="recursionCnt">0</xsl:param>
<xsl:param name="isLast">1</xsl:param>
<xsl:param name="inArray">0</xsl:param>
<xsl:if test="$recursionCnt=0">
<xsl:text>json = {</xsl:text>
</xsl:if>
<!-- test what type of data to output -->
<xsl:variable name="elementDataType">
<xsl:value-of select="number(text())"/>
</xsl:variable>
<xsl:variable name="elementData">
<!-- TEXT ( use quotes ) -->
<xsl:if test="string($elementDataType) ='NaN'">
<xsl:if test="boolean(text())">
<xsl:if test="not(*)">
"<xsl:value-of select="text()"/>"
</xsl:if>
</xsl:if>
</xsl:if>
<!-- NUMBER (no quotes ) -->
<xsl:if test="string($elementDataType) !='NaN'">
<xsl:value-of select="text()"/>
</xsl:if>
<!-- NULL -->
<xsl:if test="not(*)">
<xsl:if test="not(text())">
null
</xsl:if>
</xsl:if>
</xsl:variable>
<xsl:variable name="hasRepeatElements">
<xsl:for-each select="*">
<xsl:if test="name() = name(preceding-sibling::*) or name() = name(following-sibling::*)">
true
</xsl:if>
</xsl:for-each>
</xsl:variable>
<xsl:if test="not(count(@*) > 0)">
"<xsl:value-of select="local-name()"/>": <xsl:value-of select="$elementData"/>
</xsl:if>
<xsl:if test="count(@*) > 0">
"<xsl:value-of select="local-name()"/>": {
"content": <xsl:value-of select="$elementData"/>
<xsl:for-each select="@*">
<xsl:if test="position()=1">,</xsl:if>
<!-- test what type of data to output -->
<xsl:variable name="dataType">
<xsl:value-of select="number(.)"/>
</xsl:variable>
<xsl:variable name="data">
<!-- TEXT ( use quotes ) -->
<xsl:if test="string($dataType) ='NaN'">
"<xsl:value-of select="current()"/>" </xsl:if>
<!-- NUMBER (no quotes ) -->
<xsl:if test="string($dataType) !='NaN'">
<xsl:value-of select="current()"/>
</xsl:if>
</xsl:variable>
<xsl:value-of select="local-name()"/>:<xsl:value-of select="$data"/>
<xsl:if test="position() !=last()">, </xsl:if>
</xsl:for-each>
}
</xsl:if>
<xsl:if test="not($hasRepeatElements = '')">
[{
</xsl:if>
<xsl:for-each select="*">
<xsl:if test="position()=1">
<xsl:if test="$hasRepeatElements = ''">
<xsl:text> { </xsl:text>
</xsl:if>
</xsl:if>
<xsl:apply-templates select="current()">
<xsl:with-param name="recursionCnt" select="$recursionCnt+1"/>
<xsl:with-param name="isLast" select="position()=last()"/>
<xsl:with-param name="inArray" select="not($hasRepeatElements = '')"/>
</xsl:apply-templates>
<xsl:if test="position()=last()">
<xsl:if test="$hasRepeatElements = ''">
<xsl:text> } </xsl:text>
</xsl:if>
</xsl:if>
</xsl:for-each>
<xsl:if test="not($hasRepeatElements = '')">
}]
</xsl:if>
<xsl:if test="not( $isLast )">
<xsl:if test="$inArray = 'true'">
<xsl:text> } </xsl:text>
</xsl:if>
,
<xsl:if test="$inArray = 'true'">
<xsl:text> { </xsl:text>
</xsl:if>
</xsl:if>
<xsl:if test="$recursionCnt=0"> }; </xsl:if>
</xsl:template>
</xsl:stylesheet>
JAVA代码
public class XmlJson {
public static String process(String resrouce, String xslFile) {
URL oUrl = XmlJson.class.getResource("/");
File oFileurl = new File(oUrl.getFile());
xslFile = oFileurl.getAbsolutePath() +"\\"+ xslFile;
StringWriter out = new StringWriter();
try {
TransformerFactory transFactory = TransformerFactory.newInstance();
StreamSource streamSourcexslt = new StreamSource(xslFile);
StreamSource streamSourcexml = new StreamSource(new StringReader(
resrouce));
Transformer xsltTransformer = transFactory
.newTransformer(streamSourcexslt);
xsltTransformer.transform(streamSourcexml, new StreamResult(out));
} catch (TransformerConfigurationException tce) {
System.out.println("ERROR: TransformerConfigurationException "
+ tce);
tce.printStackTrace();
} catch (TransformerException te) {
System.out.println("ERROR: TransformerException " + te);
te.printStackTrace();
}
return out.toString();
}
public static String open(String url, String s) {
URL oUrl = XmlJson.class.getResource("/");
File oFileurl = new File(oUrl.getFile());
url = oFileurl.getAbsolutePath()+"\\" + url;
Document oDocument = null;
if (url.length() > 0) {
SAXReader reader = new SAXReader();
try {
oDocument = reader.read(url);
} catch (DocumentException e) {
try {
if (null != s) {
if (s.length() > 0) {
oDocument = DocumentHelper.parseText(s);
}
}
File oFile = new File(url);
url = oFile.getParent();
if (null != url)
oFile = new File(url);
oFile.mkdirs();
} catch (Exception e1) {
e1.printStackTrace();
}
}
}
return oDocument.asXML();
}
public static void main(String[] args){
String xml=XmlJson.open("rsp.xml","<rsp/>");
// long end=System.currentTimeMillis()-begin;
System.out.println(XmlJson.process(xml, "xml-2-json.xml"));
}
}
改技术性能比较差,100次需要7秒.用json-lib直接用对象转成xml会比较快,1W次0.7秒的
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:ebl="urn:ebay:apis:eBLBaseComponents" exclude-result-prefixes="ebl">
<!--====================================================================================
Original version by : Holten Norris ( holtennorris at yahoo.com )
Current version maintained by: Alan Lewis (alanlewis at gmail.com)
Thanks to Venu Reddy from eBay XSLT team for help with the array detection code
Protected by CDDL open source license.
Transforms XML into JavaScript objects, using a JSON format.
===================================================================================== -->
<xsl:output method="text" encoding="UTF-8"/>
<xsl:template match="*">
<xsl:param name="recursionCnt">0</xsl:param>
<xsl:param name="isLast">1</xsl:param>
<xsl:param name="inArray">0</xsl:param>
<xsl:if test="$recursionCnt=0">
<xsl:text>json = {</xsl:text>
</xsl:if>
<!-- test what type of data to output -->
<xsl:variable name="elementDataType">
<xsl:value-of select="number(text())"/>
</xsl:variable>
<xsl:variable name="elementData">
<!-- TEXT ( use quotes ) -->
<xsl:if test="string($elementDataType) ='NaN'">
<xsl:if test="boolean(text())">
<xsl:if test="not(*)">
"<xsl:value-of select="text()"/>"
</xsl:if>
</xsl:if>
</xsl:if>
<!-- NUMBER (no quotes ) -->
<xsl:if test="string($elementDataType) !='NaN'">
<xsl:value-of select="text()"/>
</xsl:if>
<!-- NULL -->
<xsl:if test="not(*)">
<xsl:if test="not(text())">
null
</xsl:if>
</xsl:if>
</xsl:variable>
<xsl:variable name="hasRepeatElements">
<xsl:for-each select="*">
<xsl:if test="name() = name(preceding-sibling::*) or name() = name(following-sibling::*)">
true
</xsl:if>
</xsl:for-each>
</xsl:variable>
<xsl:if test="not(count(@*) > 0)">
"<xsl:value-of select="local-name()"/>": <xsl:value-of select="$elementData"/>
</xsl:if>
<xsl:if test="count(@*) > 0">
"<xsl:value-of select="local-name()"/>": {
"content": <xsl:value-of select="$elementData"/>
<xsl:for-each select="@*">
<xsl:if test="position()=1">,</xsl:if>
<!-- test what type of data to output -->
<xsl:variable name="dataType">
<xsl:value-of select="number(.)"/>
</xsl:variable>
<xsl:variable name="data">
<!-- TEXT ( use quotes ) -->
<xsl:if test="string($dataType) ='NaN'">
"<xsl:value-of select="current()"/>" </xsl:if>
<!-- NUMBER (no quotes ) -->
<xsl:if test="string($dataType) !='NaN'">
<xsl:value-of select="current()"/>
</xsl:if>
</xsl:variable>
<xsl:value-of select="local-name()"/>:<xsl:value-of select="$data"/>
<xsl:if test="position() !=last()">, </xsl:if>
</xsl:for-each>
}
</xsl:if>
<xsl:if test="not($hasRepeatElements = '')">
[{
</xsl:if>
<xsl:for-each select="*">
<xsl:if test="position()=1">
<xsl:if test="$hasRepeatElements = ''">
<xsl:text> { </xsl:text>
</xsl:if>
</xsl:if>
<xsl:apply-templates select="current()">
<xsl:with-param name="recursionCnt" select="$recursionCnt+1"/>
<xsl:with-param name="isLast" select="position()=last()"/>
<xsl:with-param name="inArray" select="not($hasRepeatElements = '')"/>
</xsl:apply-templates>
<xsl:if test="position()=last()">
<xsl:if test="$hasRepeatElements = ''">
<xsl:text> } </xsl:text>
</xsl:if>
</xsl:if>
</xsl:for-each>
<xsl:if test="not($hasRepeatElements = '')">
}]
</xsl:if>
<xsl:if test="not( $isLast )">
<xsl:if test="$inArray = 'true'">
<xsl:text> } </xsl:text>
</xsl:if>
,
<xsl:if test="$inArray = 'true'">
<xsl:text> { </xsl:text>
</xsl:if>
</xsl:if>
<xsl:if test="$recursionCnt=0"> }; </xsl:if>
</xsl:template>
</xsl:stylesheet>
JAVA代码
public class XmlJson {
public static String process(String resrouce, String xslFile) {
URL oUrl = XmlJson.class.getResource("/");
File oFileurl = new File(oUrl.getFile());
xslFile = oFileurl.getAbsolutePath() +"\\"+ xslFile;
StringWriter out = new StringWriter();
try {
TransformerFactory transFactory = TransformerFactory.newInstance();
StreamSource streamSourcexslt = new StreamSource(xslFile);
StreamSource streamSourcexml = new StreamSource(new StringReader(
resrouce));
Transformer xsltTransformer = transFactory
.newTransformer(streamSourcexslt);
xsltTransformer.transform(streamSourcexml, new StreamResult(out));
} catch (TransformerConfigurationException tce) {
System.out.println("ERROR: TransformerConfigurationException "
+ tce);
tce.printStackTrace();
} catch (TransformerException te) {
System.out.println("ERROR: TransformerException " + te);
te.printStackTrace();
}
return out.toString();
}
public static String open(String url, String s) {
URL oUrl = XmlJson.class.getResource("/");
File oFileurl = new File(oUrl.getFile());
url = oFileurl.getAbsolutePath()+"\\" + url;
Document oDocument = null;
if (url.length() > 0) {
SAXReader reader = new SAXReader();
try {
oDocument = reader.read(url);
} catch (DocumentException e) {
try {
if (null != s) {
if (s.length() > 0) {
oDocument = DocumentHelper.parseText(s);
}
}
File oFile = new File(url);
url = oFile.getParent();
if (null != url)
oFile = new File(url);
oFile.mkdirs();
} catch (Exception e1) {
e1.printStackTrace();
}
}
}
return oDocument.asXML();
}
public static void main(String[] args){
String xml=XmlJson.open("rsp.xml","<rsp/>");
// long end=System.currentTimeMillis()-begin;
System.out.println(XmlJson.process(xml, "xml-2-json.xml"));
}
}
改技术性能比较差,100次需要7秒.用json-lib直接用对象转成xml会比较快,1W次0.7秒的
发表评论
-
Jackson2.x通用工具类
2014-11-03 11:38 4904import java.io.IOException; i ... -
面试题
2013-02-27 09:04 1707从1加到100(考虑减少循环次数)使用数学公式 首先要知道 ... -
单例延迟实例化
2013-01-23 08:55 13271.如果出于性能的考虑而需要对实例域使用延迟初始化,就使用双 ... -
java中重载与重写的区别
2013-01-21 10:03 925首先我们来讲讲:重载(Overloading) ( ... -
自定义标签
2012-12-15 12:58 997package com.fsti.tag; import ... -
JAXB格式化beanToXml
2012-12-14 15:03 1274context = JAXBContext.n ... -
面向对象的特征有哪些方面?
2012-12-13 09:36 1007计算机软件系统是现实 ... -
java nio缓冲器
2012-12-05 17:03 3604缓冲器仅仅是一个" 多功能 " 的数组。可 ... -
面向对象三大特性一句话概括
2012-12-04 15:58 1553封装可以隐藏实现细节,使得代码模块化; 继承可以扩 ... -
Java序列化高级认识
2012-12-04 09:13 1065将 Java 对象序列化为二进制文件的 Java 序列化技术是 ... -
面向接口编程——提升系统多态性和可扩展性
2012-12-03 14:10 1284接口的本质 接口,在表面上是由几个没有主体代码的方 ... -
面向对象之多态
2012-11-23 19:22 874多态性(polymorphisn)是允许你将父对象设置成为和一 ... -
我对"秒杀"在技术性上的一些看法
2012-11-22 11:31 1011秒杀,是指电子商务 ... -
项目编码
2012-11-16 13:59 1157看两个项目所用的编码是否一样 Java的乱码问题: ... -
SVN错误:Attempted to lock an already-locked dir
2012-11-07 09:08 1027出现这个问题后使用“ ... -
面向对象的三个基本特征
2012-11-04 08:31 1088面向对象的三个基本特征是:封装、继承、多态。 封装 封装最 ... -
预编译防sql注入
2012-11-03 20:23 1972prepareStatement会先初始化SQL,先把这个SQ ... -
Java类与对象的初始化
2012-10-19 09:33 896Java类与对象的初始化 面试的时候,经常会遇到这样的笔试题 ... -
commons bean
2012-10-19 09:15 889这是两个javabean对象 package com.bea ... -
java工具DateUtil
2012-10-12 14:42 1054//一年内的周一 public final class Da ...
相关推荐
在标题提到的“xslt-xml2json”项目中,开发者已经实现了一个基于XSLT1.0的XML到JSON转换器。这个转换器的核心是利用XSLT的模板匹配和数据转换能力,将XML的树状结构映射到JSON的键值对结构。以下是一些关键知识点:...
- **模式匹配**:指定何时应用某个模板,基于元素的名称或其他特性。 2. **XSLT转换过程**: - **选择源节点**:根据样式表中的模式匹配,确定要处理的XML节点。 - **应用模板**:对选定的节点,执行相应的模板...
原版的模板文件有免费资源我知道,但这个是我再次加工升级的文件,来自jmeter.results.shanhe.me.xsl。为了便于区分,我将名字做了修改。 我之前上传的jmeter.results.shanhe.me.xsl没有这个功能强大和实用。 功能...
6. JSON与XML互转:在某些情况下,XML数据可能需要先转换为JSON格式,因为JavaScript更自然地处理JSON数据。 总之,这个实例展示了XML、XSLT、HTML和JavaScript在Web开发中的协同工作,提供了一种灵活的方法来处理...
在第9章中,主要探讨的是如何将XML数据转换成其他格式,最常见的工具是XSLT(Extensible Stylesheet Language Transformations)。XSLT允许开发者定义规则,将XML文档转换为HTML、PDF或其他XML文档,以适应不同的...
XSLT提供了丰富的功能,包括条件判断(`<xsl:if>`)、循环(`<xsl:for-each>`)、模板匹配(`<xsl:template>`)以及函数调用等,使得XML数据可以根据需要被灵活地呈现和转换。 在实际应用中,XSLT通常与XML解析器...
XSLT使用模板匹配和样式表来定义转换规则,是处理XML数据的强大工具。 5. **命名空间**:在XML中,命名空间用于区分相同标签名但来自不同源的情况。通过引入命名空间前缀和URL,可以避免元素名冲突,确保XML文档的...
XML和JSON各有优缺点,XML在结构和规范性上更强,JSON则在简洁性和易读性上有优势。 10. **XML在配置管理中的应用**:许多应用程序和框架如Spring框架,使用XML文件来配置组件和行为,提供了一种灵活和可扩展的方式...
9. **XML与JSON的对比**:虽然JSON(JavaScript Object Notation)近年来更受青睐,但XML因其丰富的元数据支持和自我描述性,在某些场景下仍具有优势。XML的复杂性可能增加处理成本,但JSON的简洁性则利于快速解析和...
- 通过模板匹配和控制流指令,实现XML到XML的转换。 7. **DOM(Document Object Model)**: - DOM是XML文档的树形表示,允许程序对XML进行动态操作。 - 通过DOM,可以添加、删除、修改元素和属性。 8. **SAX...
- **与SOAP的关系**: SOAP(Simple Object Access Protocol)是一种基于XML的消息协议,用于交换应用间的数据。 #### 六、学习资源推荐 - **官方文档**: W3C官方网站提供了大量的XML相关文档和技术规范。 - **在线...
9. **XML和JSON的比较**:XML和JSON(JavaScript Object Notation)都是数据交换格式,但JSON更简洁、轻量级,常用于Web应用程序。对比两者优缺点,根据实际需求选择合适的格式。 通过深入学习并实践这些知识点,你...
3. **XSLT**:XSL(Extensible Stylesheet Language)转换用于将XML文档转换成其他格式,如HTML、PDF或者纯文本。XSLT通过定义模板来控制转换过程,使得数据呈现方式可以根据需求定制。 4. **DOM(Document Object ...
8. **XSLT**:XSL(可扩展样式表语言)的转换部分,用于将XML转换成其他格式,如HTML或PDF。XSLT通过模板匹配和变量来实现复杂的转换逻辑。 9. **XML在Web服务中的应用**:XML广泛应用于Web服务,如SOAP(简单对象...
4. **XSLT(XSL Transformations)**:XSLT用于转换XML文档,将其转换成其他格式,如HTML、PDF或另一个XML文档。它使用模板和规则来定义转换过程。 5. **DOM(Document Object Model)与SAX(Simple API for XML)*...
10. **XML工具和技术**:了解XML编辑器、验证工具和调试器,如 Oxygen XML、XMLSpy和Visual Studio Code等,以及XML相关的库和框架,如Java的JAXB和.NET的XmlSerializer。 通过学习和掌握以上知识点,你可以成为一...
3. **XSL (Extensible Stylesheet Language)**:XSL是一种用于转换XML文档的样式表语言,可以将XML数据转换成HTML、PDF或其他格式。在W3School的XSL教程中,你会学习到XSLT(XSL Transformations)的基本概念,包括...
使用XML和XSL创建动态文档。 由创建和维护。 该项目当前正在。 有关如何使用样式套件的更多信息,请参见LogicPull。 配置 Stylkit带有一个配置文件config.js 。 这可用于设置Apache FOP可执行文件的位置,以及输入...
CAM编辑器是领先的开源XML编辑器/验证/架构工具集,用于快速构建/部署XML / JSON / Hibernate / SQL数据/ Forms应用程序。 可视WYSIWYG数据设计,规则输入向导+拖放字典组件。 将从XML Schema / JSON导入,分析/重构...