- 浏览: 114822 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
zxjlwt:
学习了!http://surenpi.com
Eclipse开发之进度条 -
coolboyysy:
解决的办法是:导入相关包即可解决。包名如下:jruby-con ...
请教Tomcat启动,Spring调用时的java.lang.ClassNotFoundException: groov -
sitoto:
给个对应的确build.xml 的例子啊,,
使用Ant 构建Eclipse RCP Product -
masuweng:
今天培训恰好讲到这些内容了
单例模式在多线程下的使用 -
zhaofangtao:
hi
你这个示例是在 3.2还是3.4的??
我的3.4里 ...
记录swt对话框上次打开的地址
/**
* <p>
* Title: Parser类
* </p>
* <p>
* Description: xml之间转换主类
* </p>
* <p>
* Copyright: Copyright (c) 2009
* </p>
* <p>
*
* </p>
*
*
* @version 1.0
*/
public class Parser {
//存放规则文件schema文件的绝对路径
private String ruleSchemaPath;
//存放规则文件的绝对路径
private String rulePath;
//存放源文件的绝对路径
private String sourcePath;
//存放结果文件的绝对路径
private String targetFileFullName;
//存放根据规则文件生成的Document对象
private Document doc;
public String getRuleSchemaPath() {
return ruleSchemaPath;
}
/**
* 设置规则文件schema的绝对路径
* @param ruleSchemaPath
*/
public void setRuleSchemaPath(String ruleSchemaPath) {
this.ruleSchemaPath = ruleSchemaPath;
}
public Document getDoc() {
return doc;
}
public void setDoc(Document doc) {
this.doc = doc;
}
public String getSourcePath() {
return sourcePath;
}
/**
* 设置源xml文件的绝对路径
* @param sourcePath
*/
public void setSourcePath(String sourcePath) {
this.sourcePath = sourcePath;
}
public String getTargetFileFullName() {
return targetFileFullName;
}
/**
* 设置要生成的目标xml文件的名称,是绝对路径
* @param targetFileFullName 要生成的目标xml文件的绝对路径
*/
public void setTargetFileFullName(String targetFileFullName) {
this.targetFileFullName = targetFileFullName;
}
public String getRulePath() {
return rulePath;
}
/**
* 设置规则文件的绝对路径
* @param rulePath 规则文件的绝对路径
*/
public void setRulePath(String rulePath) {
this.rulePath = rulePath;
}
public Parser() {
super();
// TODO Auto-generated constructor stub
}
/**
* 从一个文件路径里读取一个Document
* @param fileName 文件的绝对路径
* @return Document
*/
private Document read(String fileName){
SAXReader reader = new SAXReader();
Document document = null;
try {
document = reader.read(new File(fileName));
} catch (DocumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return document;
}
/**
* 根据schema文件验证规则文件是否合法,如果合法,返回true;否则返回false.
* @param xsdPath schema文件的绝对路径
* @param xmlPath 欲验证的xml文件的绝对路径
* @return 如果xml文件符合指定的schema文件要求,返回true;否则返回false.
*/
private boolean validateXmlByXsd(String xsdPath,String xmlPath){
boolean isOK = false;
File xmlFile = new File(xmlPath);
File xsdFile = new File(xsdPath);
if(!xmlFile.exists() || !xsdFile.exists()){
return isOK;
}
SAXParserFactory factory = SAXParserFactory.newInstance();
factory.setNamespaceAware(true);
factory.setValidating(true);
try {
SAXParser parser = factory.newSAXParser();
parser.setProperty(StaticConstant.SCHEMA_LANGUAGE, StaticConstant.XML_SCHEMA);
parser.setProperty(StaticConstant.SCHEMA_SOURCE, xsdFile);
XMLReader xmlReader = parser.getXMLReader();
xmlReader.setContentHandler(new DefaultHandler());
xmlReader.setErrorHandler(new DefaultErrorHandler());
xmlReader.parse(xmlPath);
isOK = true;
} catch (ParserConfigurationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SAXException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return isOK;
}
/**
* 读取规则文件和源文件生成目标文件的Document
* @return 目标文件的Document.
*/
private Document parseRuleXml(){
//首先根据规则文件的schema验证规则文件是否正确,若不正确直接抛错误。
if(validateXmlByXsd(getRuleSchemaPath(), getRulePath())){//如果验证正确
Document rule = read(rulePath);
Document source = read(sourcePath);
Element ruleRoot = rule.getRootElement();
List children = ruleRoot.selectNodes("/rule/children");
for(int i=0,l=children.size();i<l;i++){
Element child = (Element)children.get(i);
if(doc == null){
doc = DocumentHelper.createDocument();
}
Iterator childIt = child.elementIterator();
XpathParser xp = new XpathParser();
xp.setFromDocument(source);
xp.setTargetDocument(doc);
while(childIt.hasNext()){
Element el = (Element)childIt.next();
String text = el.getText();
if(el.getName().equals("parent_from")){
xp.setParentFrom(text);
}else if(el.getName().equals("parent_to")){
xp.setParentTo(text);
}else if(el.getName().equals("from")){
xp.setFrom(text);
}else if(el.getName().equals("to")){
xp.setTo(text);
}
}
doc = xp.getTargetDocument();
}
} else
try {
throw new Exception("规则文件不符合它的schema,请重新写规则文件并用其schema做验证!");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return doc;
}
/**
* 生成目标XML文件,如果成功生成,返回true;否则返回false.
* @return boolean
*/
public boolean toXML(){
boolean isOK = false;
//创建XML文档
OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding("UTF-8");
try {
Document doc = parseRuleXml();
XMLWriter writer = new XMLWriter(new FileOutputStream(getTargetFileFullName()),format);
writer.write(doc);
writer.close();
isOK = true;
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return isOK;
}
public static void main(String[] args){
Parser parser = new Parser();
parser.setRuleSchemaPath("F:\\ESB\\example\\rule.xsd");
parser.setRulePath("F:\\ESB\\example\\rule.xml");
parser.setSourcePath("F:\\ESB\\example\\source.xml");
parser.setTargetFileFullName("F:\\ESB\\example\\result.xml");
if(parser.toXML()){
System.out.println("成功生成XML!!!");
}else{
System.out.println("生成XML出现错误!!!");
}
}
}
/**
* <p>
* Title: XpathParser类
* </p>
* <p>
* Description: 根据xpath读取目标文件里的数据,同时根据描述目标文件的xpath生成目标文件的Document。
* </p>
* <p>
* Copyright: Copyright (c) 2009
* </p>
* <p>
*
* </p>
*
* * @version 1.0
*/
public class XpathParser {
//规则文件中源文件的父路径
private String parentFrom;
//规则文件中源文件本身路径
private String from;
//规则文件中目标文件的父路径
private String parentTo;
//规则文件中目标文件路径本身
private String to;
//源文件Document
private Document fromDocument;
//目标文件Document
private Document doc;
public String getParentFrom() {
return parentFrom;
}
public void setParentFrom(String parentFrom) {
this.parentFrom = parentFrom;
}
public String getFrom() {
return from;
}
public void setFrom(String from) {
this.from = from;
}
public String getParentTo() {
return parentTo;
}
public void setParentTo(String parentTo) {
this.parentTo = parentTo;
}
public String getTo() {
return to;
}
public void setTo(String to) {
this.to = to;
}
public void setFromDocument(Document source) {
// TODO Auto-generated method stub
this.fromDocument = source;
}
public Document getFromDocument() {
return fromDocument;
}
public void setTargetDocument(Document doc) {
// TODO Auto-generated method stub
this.doc = doc;
}
/**
* 根据规则文件生成目标文件的Document
* @return
*/
public Document getTargetDocument() {
// TODO Auto-generated method stub
String parentPath = "";
if(this.parentTo == null || this.parentTo.equals("")){
if(this.to != null && !this.to.equals("")){
if(this.to.startsWith(StaticConstant.SLASH)){//表示to指的是绝对路径
parentPath = this.to;
} else
try {
throw new Exception("没有父路径的情况下,此目标路径必须为绝对路径!");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} else
try {
throw new Exception("目标路径不能为空!");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}else if(this.parentTo != null){
if(this.parentTo.startsWith(StaticConstant.SLASH)){//表示父路径xpath是绝对路径
if(this.to != null && !this.to.equals("")){
if(this.to.startsWith(StaticConstant.SLASH)){//表示to指的是绝对路径
parentPath = this.to;
}else{
parentPath = this.parentTo.concat(StaticConstant.SLASH).concat(this.to);//表示to指的是相对路径
}
}else
new Exception("必须要有子路径!");
} else
try {
throw new Exception("父路径必须为绝对路径!");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
String[] parents = parentPath.substring(1).split(StaticConstant.SLASH);
String temp = "";
Element parentElement = null;
for(int i=0,l=parents.length;i<l;i++){
String parent = parents[i];
temp += StaticConstant.SLASH + parent;
if(this.doc.selectNodes(temp).isEmpty()){
if(parent.indexOf(StaticConstant.LEFT_MIDDLE_BRACKET) != -1){//表示有属性
String p[] = parent.split("\\" + StaticConstant.LEFT_MIDDLE_BRACKET);
if(parentElement == null ){
parentElement = this.doc.addElement(p[0]);
}else{
parentElement = parentElement.addElement(p[0]);
}
String attr = p[1].substring(1, p[1].length()-1);
parentElement.addAttribute(attr.substring(0,attr.indexOf("=")), attr.substring(attr.indexOf("=")+2,attr.length()-1));
}else{
if(parentElement == null ){
parentElement = this.doc.addElement(parent);
}else{
parentElement = parentElement.addElement(parent);
}
}
}else {
parentElement = (Element)this.doc.selectSingleNode(temp);
}
}
//读源里的值
String fromPath = "";
if(this.parentFrom == null || this.parentFrom.equals("")){
if(this.from != null && !this.from.equals("")){
if(this.from.startsWith(StaticConstant.SLASH)){//表示from指的是绝对路径
fromPath = this.from;
}else{
try {
throw new Exception("没有父路径的情况下,此目标路径必须为绝对路径!");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
} else
try {
throw new Exception("必须要有子路径!");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}else if(this.parentFrom != null){
if(this.parentFrom.startsWith(StaticConstant.SLASH)){//表示xpath是绝对路径
if(this.from != null && !this.from.equals("")){
if(this.from.startsWith(StaticConstant.SLASH)){//表示from指的是绝对路径
fromPath = this.from;
}else{
fromPath = this.parentFrom.concat(StaticConstant.SLASH).concat(this.from);//表示from指的是相对路径
}
} else
try {
throw new Exception("必须要有子路径!");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} else
try {
throw new Exception("父路径必须为绝对路径!");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
String text = this.fromDocument.selectSingleNode(fromPath).getText();
this.doc.selectSingleNode(parentPath).setText(text);
return this.doc;
}
}
/**
* <p>
* Title: StaticConstant类
* </p>
* <p>
* Description: 静态常量
* </p>
* <p>
* Copyright: Copyright (c) 2009
* </p>
* <p>
*
* </p>
*
*
* @version 1.0
*/
public class StaticConstant {
public static final String LEFT_BRACKET = "<";
public static final String RIGHT_BRACKET = ">";
public static final String SLASH = "/";
public static final String LEFT_MIDDLE_BRACKET = "[";
public static final String blank =" ";
public static final String SCHEMA_LANGUAGE = "http://java.sun.com/xml/jaxp/properties/schemaLanguage";
public static final String XML_SCHEMA = "http://www.w3.org/2001/XMLSchema";
public static final String SCHEMA_SOURCE = "http://java.sun.com/xml/jaxp/properties/schemaSource";
}
测试类
public class MainTest extends TestCase{
public void test(){
Parser parser = new Parser();
parser.setRuleSchemaPath("F:\\ESB\\example\\rule.xsd");
parser.setRulePath("F:\\ESB\\example\\rule.xml");
parser.setSourcePath("F:\\ESB\\example\\source.xml");
parser.setTargetFileFullName("F:\\ESB\\example\\result.xml");
if(parser.toXML()){
System.out.println("成功生成XML!!!");
}else{
System.out.println("生成XML出现错误!!!");
}
}
}
发表评论
-
拼图测试类
2012-09-04 16:40 1210/** * */ /** * @author ... -
java拼图
2012-09-04 16:39 1235/** * */ /** * @author ... -
有用的SQL
2010-10-14 18:37 11251.db2 删除重复的记录:delete from (sele ... -
工作中遇到的问题总结---不断更新
2010-10-14 18:35 148291. 启动tomcat报找不到com.ibm.db2.jcc. ... -
Javascript在页面加载时的执行顺序
2010-09-08 09:37 1484Javascript在页面加载时的执行顺序 收藏 一、在H ... -
我自己写的XML to XML 转换的工具
2009-11-27 14:58 1193一、xml to xml 转换原理 在ESB中,很多时候需要 ... -
今天写的拷贝某个目录下所有符合要求的文件名到某个指定文件名的工具类
2009-02-12 14:57 1144今天因为想把eclipse语言 ... -
Java传值还是传引用终极解释,还是看老外解释的清楚啊。
2008-06-12 15:39 6618by http://www.javaworld.com/jav ... -
使用JXL读Excel文件
2007-09-15 15:52 3871使用JXL读Excel文件 以前用过POI解析Excel,但是 ...
相关推荐
本篇文章将详细介绍Java中如何实现XML和JSON的相互转换,并提供一个名为`XmlToJson.java`的工具类作为参考。 首先,XML是一种结构化的数据表示方式,它以树形结构存储数据,易于人类阅读和编写,同时也易于机器解析...
这个类可能包含静态方法,如`beanToXml(JavaBean bean)`用于将JavaBean转换为XML字符串,以及`xmlToBean(String xml)`用于将XML字符串反向转换回JavaBean。使用这样的工具类可以使代码更加简洁,提高代码复用性。 ...
XML-to-JSON和JSON-to-XML转换在数据交换中扮演着关键角色,尤其在Web开发中。开发者可以利用各种库和在线工具进行转换,以满足不同环境下的需求。理解这些转换原理和工具的使用,对于提高开发效率和优化数据处理...
本项目"XMLto JSON 源码"正是为此目的设计,它提供了一个C#编写的`XmlToJson`类,能够方便地将XML字符串转换为JSON字符串。 XMLtoJSON的实现主要基于.NET Framework或.NET Core的内置类库,如System.Xml和System....
public static T XmlToEntity(string xml) where T : new() { using (TextReader reader = new StringReader(xml)) { var serializer = new XmlSerializer(typeof(T)); return (T)serializer.Deserialize(reader...
接着,我们来看`Xml2Json.java`文件,这个工具类应该包含了XML转换为JSON的逻辑。在Jackson库中,我们可以使用`XmlMapper`类将XML对象映射为JSON。下面是一个简单的示例: ```java import ...
#### 三、XML转换为`DataTable`或`DataSet` 将XML字符串转换回`DataTable`或`DataSet`也很简单,可以使用`ReadXml`方法实现。具体代码如下: ```csharp public static DataSet XmlToDataSet(string xml) { try {...
将XML转换为PDF,通常涉及以下几个步骤: 1. **解析XML文件**:首先,需要读取XML文件,解析其结构和内容。 2. **转换为可渲染格式**:XML数据需要转换成像HTML或XSL-FO(Extensible Stylesheet Language ...
4. **struct到XML转换**:这个过程与解析相反,需要遍历struct,为每个字段生成对应的XML标签和值。这通常涉及到递归处理嵌套的struct或数组。 5. **编码与解码**:由于XML通常是Unicode(如UTF-8)编码,而C语言的...
在实际使用`EasyXmlUtil`时,只需简单调用`xmlToMap`和`mapToXml`方法,即可完成XML和Map之间的转换。例如: ```java Map, String> map = EasyXmlUtil.xmlToMap(xmlString); String xmlString = EasyXmlUtil....
在`beanToXml()` 方法中,同样需要初始化xStream实例,然后使用`toXML()` 方法将Bean对象转换为XML字符串: ```java public String beanToXml(YourBeanClass bean) { XStream xstream = new XStream(new DomDriver...
在提供的文件`ClassToXml.java`和`CC.java`中,很可能是实现了XML到Bean或Bean到XML转换的示例代码。具体实现细节需要查看源代码才能理解。通常,这些类会包含对JAXB API的调用,如创建JAXBContext、Unmarshaller和...
在某些场景下,我们需要将XML数据转换为JSON格式,以便于JavaScript进行处理,这正是"jquery-xmlToJson.js"这个文件的作用。 "jquery-xmlToJson.js"是一个jQuery插件,它的主要功能是将XML文档或字符串转换为JSON...
同时,.NET Framework 2.0(包含在VS2003中)引入了LINQ to XML(Language Integrated Query for XML),这是一种更直观的方式来处理XML文档,可以方便地创建、查询和修改XML。 4. **.NET中的数据绑定**: 在.NET...
在上述两种方法中,`CreateObjectFromNode`和`ConvertXmlNodeTo<T>`方法需要根据实际的XML结构和要转换的类来实现。通常,这涉及到反序列化XML节点的属性或子元素到T类型的对象的属性。 总的来说,C#提供了多种方式...
在.NET环境中,有XmlSerializer或LINQ to XML等工具。 2. **创建数据模型**:为了存储解析后的数据,我们需要定义一个与XML元素相对应的数据结构。比如,对于上述示例,我们可以创建一个`Item`类: ```java ...
这个压缩包“xmlto-0.0.28.tar.gz”是一个在Linux或类Unix系统中常见的源码包,它使用gzip压缩算法,通过tar命令进行打包,通常用于分发开源软件的源代码。 在解压这个文件后,我们通常会得到一个名为“xmlto-0.0....
在这种情况下,Jackson库能够很好地处理这些复杂性,自动将XML转换为对应的JSON结构。此外,你还可以自定义序列化和反序列化过程,以满足特定的需求。 标签“XML/JSON”表明这个话题涉及两个主要的数据格式,XML和...
这个技术使得开发者可以方便地将XML数据转换为Java对象,反之亦然。在给定的压缩包文件中,可能包含了实现这一功能的相关代码示例,包括XML文件、数据传输对象(DTO,Data Transfer Object)以及一个用于读取文件的...
- 使用Java的Jackson库:Jackson库中的`com.fasterxml.jackson.databind.ObjectMapper`类提供了将XML转换为JSON的功能。首先,我们需要解析XML到一个`org.w3c.dom.Document`对象,然后使用`readValue`方法将其转换...