在EDI(电子数据交换)系统中经常会遇到这样的事情,也就是在系统内定义的XML文档是一种格式,而外系统定义的则是另外的一种格式,或者是不同的外系统定义的格式不太一样,例如对于人员有些地方定义为,而其他的组织则使用 或者 .① 这个时候就需要一种XML转换成XML的格式了。
XSLT则就脱颖而出了,XSLT是XSL(EXtensible Stylesheet Language 扩展样式表语言)的一部分,专门负责XML转换成其他格式的一种语言。具体的学习可以参考网上的XSLT的资料。
如果你使用Java的话,很幸运,Java提供了一组API支持了XSLT的使用,可以不使用第三方的库就可以轻松的进行转换。进行转换只需要准备源文件(被转换的XML),转换的模板(XSLT文件),一段Java代码。
样例如下:
源文件:
模板:
Discussion Forum Home Page
Discussion Forum Home Page
Please select a message board to view:
Java代码
importjava.io.File;importjava.io.IOException;importjava.net.URISyntaxException;importjavax.xml.transform.Source;importjavax.xml.transform.Transformer;importjavax.xml.transform.TransformerException;importjavax.xml.transform.TransformerFactory;importjavax.xml.transform.stream.StreamResult;importjavax.xml.transform.stream.StreamSource;public classTestMain {public static void main(String[] args) throwsIOException, URISyntaxException, TransformerException {
TransformerFactory factory=TransformerFactory.newInstance();
Source xslt= new StreamSource(new File(“D:\\dev\\learn\\discussionForumHome.xslt”));
Transformer transformer=factory.newTransformer(xslt);
Source text= new StreamSource(new File(“D:\\dev\\learn\\discussionForumHome.xml”));
transformer.transform(text,new StreamResult(new File(“D:\\dev\\learn\\output.xml”)));
}
}
TIP 1.输出中文文件名有问题
如果你直接使用StreamResult进行文件输出时,会出现这样的现象,文件名变成%的ASCII格式,例如
transformer.transform(text, new StreamResult(newFile(“D:\\dev\\learn\\小狗.xml”)));
输出的文件名为:
%E5%B0%8F%E7%8B%97.xml
这个时候跟踪StreamResult的代码,发现 StreamResult在构造函数里面用文件的ASCII吗作为SystemID了。
setSystemId(f.toURI().toASCIIString());
这个时候可以通过设置OutputStream方式进行设置
StreamResult sr = newStreamResult();
sr.setOutputStream(new FileOutputStream(new File(“D:\\dev\\learn\\小狗.xml”)));
transformer.transform(text,sr);
注①。举例摘自《Java and XSLT》一书,同时XML文件内容也是如此
今天的文章java xslt转换xml_使用XSLT转换XML2XML分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/5134.html