`
sunway
  • 浏览: 115164 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

我自己写的XML to XML 转换的工具

阅读更多

一、xml to xml 转换原理

ESB中,很多时候需要不同格式xml文件之间的数据转换,下面就是一种根据规则文件将源xml转换成符合规则文件的目标xml文件,同时将源xml文件中的数据迁移至生成的目标xml文件中。

用户首先根据schema里规定的规则文件应该含有的元素和源xml写出正确的规则文件,程序根据规则文件里目标文件的xml结构生成目标xml文件。系统会在内部首先根据schema文件验证写的规则文件是否符合schema标准,如果不符合,将直接抛出异常信息;验证通过才进行目标文件的生成。

二、规则文件结构

2.1.     根节点:rule,这是规则文件的根节点,在其schema里定义为<xs:element name="rule" type="ruletype"></xs:element>

2. 2  子节点:children,可以有多个,至少一个。每一个children节点表示了一个源xml文件节点值和一个目标xml节点的构造。Children节点包括以下四个节点,其中parent_fromparent_to节点可以省略。

2.2.1   Parent_from:表示源xml文件节点的父节点,可以省略。如果省略,则用from节点表示源xml节点的绝对路径。Parent_from节点必须是个绝对路径,即必须以“/”开始。

2.2.2   Parent_to:表示将要构造的目标xml文件节点的父节点,可以省略。如果省略,则用to节点表示目标xml节点的绝对路径。Parent_to节点必须是个绝对路径,即必须以“/”开始。

2.2.3   From:表示源xml文件节点,如果有Parent_from节点,则源文件节点是Parent_from+/+from节点,取它的text值做为目标xml文件节点的值。如果没有parent_from节点,则源文件节点就是这个from表示的节点,而且此时必须用绝对路径表示,即必须以“/”开始,因为此时它没有父节点。

2.2.4   To:表示目标xml文件节点,如果有Parent_to节点,则要构造的目标文件节点是Parent_to+/+to节点,并取源节点的值做为此节点的值。如果没有parent_to节点,则要构造的节点就是这个to表示的节点,此时必须用绝对路径表示,即必须以“/”开始,因为此时它没有父节点。

三、附schema文件rule.xsd

1表示规则文件对应的schema文件。

<?xml version="1.0" encoding="UTF-8"?>

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">

       <xs:simpleType name="stringtype">

              <xs:restriction base="xs:string"></xs:restriction>

       </xs:simpleType>

 

       <xs:complexType name="childrentype">

              <xs:sequence>

                     <xs:element name="parent_from" type="stringtype" minOccurs="0" maxOccurs="1"></xs:element>

                     <xs:element name="parent_to" type="stringtype" minOccurs="0" maxOccurs="1"></xs:element>

                     <xs:element name="from" type="stringtype" minOccurs="1" maxOccurs="1"></xs:element>

                     <xs:element name="to" type="stringtype" minOccurs="1" maxOccurs="1"></xs:element>

              </xs:sequence>

       </xs:complexType>

       <xs:complexType name="ruletype">

              <xs:sequence>

                     <xs:element name="children" type="childrentype" minOccurs="1" maxOccurs="unbounded"></xs:element>

              </xs:sequence>

       </xs:complexType>

      

       <xs:element name="rule" type="ruletype"></xs:element>

</xs:schema>

 

 

1 rule.xsd

 

 

 

 

 

 

四、应用举例:

1.xml文件source.xml如图2所示。

<?xml version="1.0" encoding="GB2312"?>

 

<greetings attribute="greeting">

      

       <greeting id="greeting1" parent="g1">

              <property name="p1">

                   p 1p 1p1p1

                     <greeting

                            class="b1" />

              </property>

              <property name="p2">

              g p2

                     <greeting

                            class="b2" />

              </property>

       </greeting>

       <greeting id="greeting2" parent="g1">

              <property name="p3">

                     g p311 dvvvvvdddd  dd

              </property>

              <property name="p4">

                     pppp 444

              </property>

             

       </greeting>

</greetings>

2 source.xml

 

 

 

 

 

 

 

 

 

2.规则文件如图3所示。

<?xml version="1.0" encoding="UTF-8"?>

<rule>   

       <children>

              <parent_from>/greetings/greeting[@id='greeting1']</parent_from>

              <parent_to>/hello/goods/good[@id='1']</parent_to>

              <from >property[@name='p1']</from>

              <to >property[@name='p1']</to>

       </children>

        <children>

              <parent_from>/greetings/greeting[@id='greeting1']</parent_from>

              <parent_to>/hello/goods/good[@id='2']</parent_to>

              <from >property[@name='p2']</from>

              <to >property[@name='p2']</to>

       </children>

       <children>

              <parent_from>/greetings/greeting[@id='greeting2']</parent_from>

              <parent_to>/hello/goods/good[@id='3']</parent_to>

              <from >property[@name='p3']</from>

              <to >property[@name='p3']</to>

       </children> 

</rule>

 

3 规则文件rule.xml

 

 

 

 

 

 

 

 

 

 

 

 

3.程序根据规则文件rule.xml生成图4所示的目标xml文件 result.xml

<?xml version="1.0" encoding="UTF-8"?>

<hello>

  <goods>

    <good id="1">

      <property name="p1">p 1p 1p1p1</property>

    </good>

    <good id="2">

      <property name="p2">g p2</property>

    </good>

    <good id="3">

      <property name="p3">g p311 dvvvvvdddd dd</property>

    </good>

  </goods>

</hello>

4 result.xml

4. 测试类

public class MainTest extends  TestCase{

       public void test(){

              Parser parser = new Parser();

       //设置规则文件的schema文件绝对路径

       parser.setRuleSchemaPath("F:\\ESB\\example\\rule.xsd");

       //设置规则文件的绝对路径

              parser.setRulePath("F:\\ESB\\example\\rule.xml");

       //设置源文件的绝对路径

              parser.setSourcePath("F:\\ESB\\example\\source.xml");

       //设置要生成的目标xml文件的绝对路径

              parser.setTargetFileFullName("F:\\ESB\\example\\result.xml");

       //是否成功生成XML文件

              if(parser.toXML()){

                     System.out.println("成功生成XML!!!");

              }else{

                     System.out.println("生成XML出现错误!!!");

              }

             

       }

}

 

分享到:
评论

相关推荐

    java的xml和json相互转换工具类,亲测直接用

    本篇文章将详细介绍Java中如何实现XML和JSON的相互转换,并提供一个名为`XmlToJson.java`的工具类作为参考。 首先,XML是一种结构化的数据表示方式,它以树形结构存储数据,易于人类阅读和编写,同时也易于机器解析...

    excel转换成xml工具

    3. 嵌套结构:如果Excel数据有嵌套结构,如子表格或重复的数据组,转换工具需要能够识别并生成相应的XML结构。 4. 特殊字符:XML有特定的字符编码规则,工具需要处理Excel中的特殊字符,避免出现XML解析错误。 总之...

    从.mesh转换到.xml的过程及工具

    - **确保安装必要的软件**:根据具体的转换工具要求,可能需要安装某些特定的软件环境或库。 - **获取.mesh文件**:准备好需要转换的.mesh文件。 ##### 3.2 使用OgreCommandLineTools进行转换 **...

    javabean和xml互相转换工具类以及jar包

    这个类可能包含静态方法,如`beanToXml(JavaBean bean)`用于将JavaBean转换为XML字符串,以及`xmlToBean(String xml)`用于将XML字符串反向转换回JavaBean。使用这样的工具类可以使代码更加简洁,提高代码复用性。 ...

    java一键xml转map,一键map转xml工具类

    在实际使用`EasyXmlUtil`时,只需简单调用`xmlToMap`和`mapToXml`方法,即可完成XML和Map之间的转换。例如: ```java Map, String&gt; map = EasyXmlUtil.xmlToMap(xmlString); String xmlString = EasyXmlUtil....

    XML to JSON and JSON to XML converter

    XML-to-JSON和JSON-to-XML转换在数据交换中扮演着关键角色,尤其在Web开发中。开发者可以利用各种库和在线工具进行转换,以满足不同环境下的需求。理解这些转换原理和工具的使用,对于提高开发效率和优化数据处理...

    xml/Json转换工具类

    接着,我们来看`Xml2Json.java`文件,这个工具类应该包含了XML转换为JSON的逻辑。在Jackson库中,我们可以使用`XmlMapper`类将XML对象映射为JSON。下面是一个简单的示例: ```java import ...

    xml和struct之间的相互转换

    4. **struct到XML转换**:这个过程与解析相反,需要遍历struct,为每个字段生成对应的XML标签和值。这通常涉及到递归处理嵌套的struct或数组。 5. **编码与解码**:由于XML通常是Unicode(如UTF-8)编码,而C语言的...

    excel转换为xml小工具

    《Excel到XML转换小工具详解》 在信息技术领域,数据交换和存储的格式多样,XML(eXtensible Markup Language)作为一种结构化数据格式,常用于数据交换和存储,尤其在编程和API交互中占据重要地位。然而,对于非...

    word to pdf word xml to pdf

    将XML转换为PDF,通常涉及以下几个步骤: 1. **解析XML文件**:首先,需要读取XML文件,解析其结构和内容。 2. **转换为可渲染格式**:XML数据需要转换成像HTML或XSL-FO(Extensible Stylesheet Language ...

    xsd生成xml工具

    此外,对于那些需要定制XML生成逻辑或者在自己的项目中集成类似功能的开发者,源代码提供了实现此类功能的起点。 在压缩包中,`xmltool.jar`可能是已经编译好的可执行文件,用户可以直接运行生成XML文档。而`xml...

    XMLto JSON 源码

    在实际应用中,这个`XmlToJson`类可以作为工具类,嵌入到其他项目中,或者封装成一个独立的服务,供其他系统调用。例如,在处理RESTful API的响应时,后端系统可能会接收到XML格式的请求,通过这个类可以快速转换为...

    XML与数据库相互转换

    同时,.NET Framework 2.0(包含在VS2003中)引入了LINQ to XML(Language Integrated Query for XML),这是一种更直观的方式来处理XML文档,可以方便地创建、查询和修改XML。 4. **.NET中的数据绑定**: 在.NET...

    xStream xml to bean

    在`beanToXml()` 方法中,同样需要初始化xStream实例,然后使用`toXML()` 方法将Bean对象转换为XML字符串: ```java public String beanToXml(YourBeanClass bean) { XStream xstream = new XStream(new DomDriver...

    jquery-xmlToJson.js

    在某些场景下,我们需要将XML数据转换为JSON格式,以便于JavaScript进行处理,这正是"jquery-xmlToJson.js"这个文件的作用。 "jquery-xmlToJson.js"是一个jQuery插件,它的主要功能是将XML文档或字符串转换为JSON...

    xml格式的字符串转换成List

    在.NET环境中,有XmlSerializer或LINQ to XML等工具。 2. **创建数据模型**:为了存储解析后的数据,我们需要定义一个与XML元素相对应的数据结构。比如,对于上述示例,我们可以创建一个`Item`类: ```java ...

    xmlto-0.0.28.tar.gz

    XMLTO是XML转换工具,主要用于将XML格式的文档转换成其他格式,如HTML、PDF、Man等,方便信息的发布和阅读。版本号0.0.28表明这是该工具的一个早期版本。这个压缩包“xmlto-0.0.28.tar.gz”是一个在Linux或类Unix...

    小米XML文件转Vcard.zip

    转换工具或脚本通常会提供批量转换功能,一次性处理整个XML文件中的所有联系人。这在用户迁移大量联系人时非常有用,避免了手动导入导出的繁琐工作。 总的来说,从小米XML文件转VCard涉及到的技术点包括XML解析、...

    java实现xmlToJson

    在这种情况下,Jackson库能够很好地处理这些复杂性,自动将XML转换为对应的JSON结构。此外,你还可以自定义序列化和反序列化过程,以满足特定的需求。 标签“XML/JSON”表明这个话题涉及两个主要的数据格式,XML和...

    把图片转换为XML格式的C#源码

    “XML”标签表明代码与XML数据处理有关,可能涉及到DOM(Document Object Model)、SAX(Simple API for XML)或LINQ to XML等解析XML的方法。 “jpg”标签则意味着程序处理的是JPEG(Joint Photographic Experts ...

Global site tag (gtag.js) - Google Analytics