java spring 如果最简单的将一个结构的XML转换成另外一个结构的XML

shoppo0505 2021-03-01 04:14:22
我目前有一个XML文件,需要转换成另外一个结构的XML,原XML文件其中的某些值会复用到新的XML文件中,但是会调整到其他的节点中,并且原来的节点名称也会重命名。
因为XML结构复杂,源文件的节点就有几百个,新的XML文件节点也会多很多,创建java对象也会很复杂,所以请问一下有什么简单有效的方法做XML转换的吗?
类似于原XML节点 对应 新XML节点这种方法?

假设结构为:
<A>
<A1> </A1>
<A2> </A2>
<B>
<B_summary> </B_summary>
<B1> </B1>
<B2> </B2>
</B>
<C>
<C_summary> </C_summary>
<C1> </C1>
<C2> </C2>
</C>
</A>

将要转换成:
<?xml version="1.0" encoding="UTF-8"?>
<root>
<r1>取A1值</r1>
<r2>取A2值</r2>
<r3>取B_summary值</r3>
<r4>取C_summary值</r4>
<A>
<B>
<NEW_B1>B1的值 </NEW_B1>
<NEW_B2>B2的值 </NEW_B2>
</B>
<C>
<NEW_C1>C1的值 </NEW_C1>
<NEW_C2>C2的值 </NEW_C2>
</C>
</A>
......
</root>
...全文
214 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
shoppo0505 2021-03-12
  • 打赏
  • 举报
回复
问题解决,结帖
shoppo0505 2021-03-02
  • 打赏
  • 举报
回复
引用 2 楼 亦夜 的回复:
个人会采取依赖文件的方式来进行转换,简单来说就是 在转换成新的xml结构之前我会自己编写一个转换结构文件,比如 root为转换后的标签名它会有 parent: 是否存在父级 value: 值 oldTag: 旧的标签名 等等这些参数,那我转换的时候只需要读取配置文件然后进行递归转换就行了,也就说,结构我自己控制,程序只做转换 当然这种方式只适用与结构可能会不断变化,或者增加新的标签, 如果你对转换是有一种特定的规则,并且这个规则是不变的,那用这种方式就显得麻烦了
我現在用JAXB創了所有的java對象,一共有106個類,看著都有點暈
shoppo0505 2021-03-02
  • 打赏
  • 举报
回复
引用 10 楼 亦夜 的回复:
[quote=引用 9 楼 亦夜 的回复:][quote=引用 7 楼 shoppo0505 的回复:][quote=引用 2 楼 亦夜 的回复:]个人会采取依赖文件的方式来进行转换,简单来说就是 在转换成新的xml结构之前我会自己编写一个转换结构文件,比如 root为转换后的标签名它会有 parent: 是否存在父级 value: 值 oldTag: 旧的标签名 等等这些参数,那我转换的时候只需要读取配置文件然后进行递归转换就行了,也就说,结构我自己控制,程序只做转换 当然这种方式只适用与结构可能会不断变化,或者增加新的标签, 如果你对转换是有一种特定的规则,并且这个规则是不变的,那用这种方式就显得麻烦了
思路没有,但是有没有更加简单的方法?我现在就原文件就创建了106个class,新xml的结构还没创建呢。这个写法要类似的[/quote] 其实我的思路和你的思路是差不多的,你只是需要不断的创建类,这样会很麻烦,后期也不好维护,到时候很久之后结构捋起来可能会稍微复杂,我只是将结构单独抽出来,转换的时候我只是通过创建临时对象,但是结构还是需要你自己去写[/quote] 按照你的思路,你既然解决了快速创建对象,向我上面提到的,你可以控制在创建对象的时候添加依赖关系吗,比如新创建的r1的父级指向就是root[/quote] 这个嵌套结构都是自动完成,大致看了一下没有什么问题。 根据你的意思,自己写对应逻辑的话,感觉很麻烦,我想问问是不是这一步有简单的方法。这一步有比较多的需求,比如改节点名称,节点位置,节点值的格式,还有值的一些mapping。
亦夜 2021-03-02
  • 打赏
  • 举报
回复
引用 9 楼 亦夜 的回复:
[quote=引用 7 楼 shoppo0505 的回复:][quote=引用 2 楼 亦夜 的回复:]个人会采取依赖文件的方式来进行转换,简单来说就是 在转换成新的xml结构之前我会自己编写一个转换结构文件,比如 root为转换后的标签名它会有 parent: 是否存在父级 value: 值 oldTag: 旧的标签名 等等这些参数,那我转换的时候只需要读取配置文件然后进行递归转换就行了,也就说,结构我自己控制,程序只做转换 当然这种方式只适用与结构可能会不断变化,或者增加新的标签, 如果你对转换是有一种特定的规则,并且这个规则是不变的,那用这种方式就显得麻烦了
思路没有,但是有没有更加简单的方法?我现在就原文件就创建了106个class,新xml的结构还没创建呢。这个写法要类似的[/quote] 其实我的思路和你的思路是差不多的,你只是需要不断的创建类,这样会很麻烦,后期也不好维护,到时候很久之后结构捋起来可能会稍微复杂,我只是将结构单独抽出来,转换的时候我只是通过创建临时对象,但是结构还是需要你自己去写[/quote] 按照你的思路,你既然解决了快速创建对象,向我上面提到的,你可以控制在创建对象的时候添加依赖关系吗,比如新创建的r1的父级指向就是root
亦夜 2021-03-02
  • 打赏
  • 举报
回复
引用 7 楼 shoppo0505 的回复:
[quote=引用 2 楼 亦夜 的回复:]个人会采取依赖文件的方式来进行转换,简单来说就是 在转换成新的xml结构之前我会自己编写一个转换结构文件,比如 root为转换后的标签名它会有 parent: 是否存在父级 value: 值 oldTag: 旧的标签名 等等这些参数,那我转换的时候只需要读取配置文件然后进行递归转换就行了,也就说,结构我自己控制,程序只做转换 当然这种方式只适用与结构可能会不断变化,或者增加新的标签, 如果你对转换是有一种特定的规则,并且这个规则是不变的,那用这种方式就显得麻烦了
思路没有,但是有没有更加简单的方法?我现在就原文件就创建了106个class,新xml的结构还没创建呢。这个写法要类似的[/quote] 其实我的思路和你的思路是差不多的,你只是需要不断的创建类,这样会很麻烦,后期也不好维护,到时候很久之后结构捋起来可能会稍微复杂,我只是将结构单独抽出来,转换的时候我只是通过创建临时对象,但是结构还是需要你自己去写
shoppo0505 2021-03-02
  • 打赏
  • 举报
回复
引用 3 楼 qybao 的回复:
看了一下,其实也不难。 首先就是新结构体包含旧结构体,所以做一个新结构体,里面包含旧结构体 然后,旧结构体部分名字改变,所以,如果用注解的话,修改旧结构体的注解,如果没用注解,自己做个converter,读取到特定的旧标签名就做一个变成新标签名的转换
看楼上
shoppo0505 2021-03-02
  • 打赏
  • 举报
回复
引用 2 楼 亦夜 的回复:
个人会采取依赖文件的方式来进行转换,简单来说就是 在转换成新的xml结构之前我会自己编写一个转换结构文件,比如 root为转换后的标签名它会有 parent: 是否存在父级 value: 值 oldTag: 旧的标签名 等等这些参数,那我转换的时候只需要读取配置文件然后进行递归转换就行了,也就说,结构我自己控制,程序只做转换 当然这种方式只适用与结构可能会不断变化,或者增加新的标签, 如果你对转换是有一种特定的规则,并且这个规则是不变的,那用这种方式就显得麻烦了
思路没有,但是有没有更加简单的方法?我现在就原文件就创建了106个class,新xml的结构还没创建呢。这个写法要类似的
shoppo0505 2021-03-02
  • 打赏
  • 举报
回复
引用 5 楼 KeepSayingNo 的回复:
最好将你需要你的两种结构定义成两个类,解析xml,给第一个类赋值,然后再写一个convertor,专门做第一个类到第二个类的转换
你说的没错,这个就是大致思路。 我现在想知道更加细节的东西。 比如, 如何根据xsd快速创建对象,(这个解决了,单根据原文件就创建了106个对象) 如果快速,有效的mapping两个xml的节点名称,以及值。
KeepSayingNo 2021-03-02
  • 打赏
  • 举报
回复
最好将你需要你的两种结构定义成两个类,解析xml,给第一个类赋值,然后再写一个convertor,专门做第一个类到第二个类的转换
qybao 2021-03-01
  • 打赏
  • 举报
回复
看了一下,其实也不难。 首先就是新结构体包含旧结构体,所以做一个新结构体,里面包含旧结构体 然后,旧结构体部分名字改变,所以,如果用注解的话,修改旧结构体的注解,如果没用注解,自己做个converter,读取到特定的旧标签名就做一个变成新标签名的转换
亦夜 2021-03-01
  • 打赏
  • 举报
回复
个人会采取依赖文件的方式来进行转换,简单来说就是 在转换成新的xml结构之前我会自己编写一个转换结构文件,比如 root为转换后的标签名它会有 parent: 是否存在父级 value: 值 oldTag: 旧的标签名 等等这些参数,那我转换的时候只需要读取配置文件然后进行递归转换就行了,也就说,结构我自己控制,程序只做转换 当然这种方式只适用与结构可能会不断变化,或者增加新的标签, 如果你对转换是有一种特定的规则,并且这个规则是不变的,那用这种方式就显得麻烦了

50,550

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧