2023年12月3日发(作者:)

xml格式转换  最近接到授权迁移的任务,需要将原xml的权限表转换成新格式的xml权限表;本来想手动完成xml格式转换,人工将旧权限表的数据转移到新表上,但仔细想了想,数据有点多,这不适合一个懒人;与人工手动实现的思路一样,将实现过程转化为java代码逻辑,实际我们编程的思路也是这样来的,化难为多,变多为简。原xml权限表数据格式: 1 1 新xml授权表数据格式: 实现思路:  读取原xml文件-->根据旧权限信息拼装新的授权数据格式-->写入新的xml文件代码:import ;import iter;import ist;import or;import ;import ute;import nt;import ntException;import ntHelper;import t;import der;import ter;/** * xml格式化转换 * @author wang-xiaoming * */public class TestXml { @SuppressWarnings("unchecked") public static void main(String[] args) throws DocumentException { /* * 读取文件 */ //1.创建SAXReader对象用于读取xml文件 SAXReader reader = new SAXReader(); //2.读取xml文件,获得Document对象 Document doc = (new File("D:/share/xiaoming/项目/供需社 1.8/")); //3.获取根元素 Element root = tElement(); //4.获取根元素下的所有子元素(通过迭代器) Iterator it = tIterator(); List items = new ArrayList<>(16);

while(t()){ Element e = (); //获取id属性(attribute是属性的意思) Attribute id = ute("id"); Attribute label = ute("label"); Element parent = t("parent"); Element display = t("display");

Item item = new Item(); // 权限码 (ingValue()); // 父权限码 (ingValue()); // 名称 e(ingValue()); // 超级链接(用于菜单) (""); // 图标 n(""); // 0不显示 1显示(用于菜单) play(ingValue()); // 用于版本升级(暂时不用) ("1"); // 国际化key 18n(""); // 标签 le(ingValue());

(item); // n("id:" + ingValue() + ",lable:" + ingValue() + ",parent:" + ingValue()); } n("---------------------------------------------------------------");

// // 格式: /* * 写入文件 */ Document newDoc = Document(); Element ele = ment("rights"); for (Item item : items) { Element itemEle = ment("item"); ribute("id", ()); ribute("pid", ()); ribute("name", e()); ribute("url", ()); ribute("icon", n()); ribute("display", play()); ribute("tag", ()); ribute("i18n", 18n()); try { XMLWriter writer = new XMLWriter(new FileWriter(new File("D:/share/xiaoming/项目/供需社 1.8/"))); (newDoc); (); } catch (Exception e) { } }

n("新的xml权限文件已生成!一共转换了" + () + "条数据。"); }}class Item{ /** * 权限码 */ private String id; /** * 父权限码 */ private String pid; /** * 名称 */ private String name; /** * 超级链接(用于菜单) */ private String url; /** * 图标 */ private String icon; /** * 0不显示 1显示(用于菜单) */ private String display; /** * 用于版本升级(暂时不用) */ private String tag; /** * 国际化key */ private String i18n; /** * 标签 */ private String lable;

public String getId() { return id; } public void setId(String id) { = id; } public String getPid() { return pid; } public void setPid(String pid) { = pid; } public String getName() { return name; } public void setName(String name) { = name; } public String getUrl() { return url; } public void setUrl(String url) { = url; } public String getIcon() { return icon; } public void setIcon(String icon) { = icon; } public String getDisplay() { return display; } public void setDisplay(String display) { y = display; } public String getTag() { return tag; } public void setTag(String tag) { = tag; } public String getI18n() { return i18n; } public void setI18n(String i18n) { this.i18n = i18n; } public String getLable() { return lable; } public void setLable(String lable) { = lable; }

}  打开生成的新格式的xml文件发现,xml的属性都挤到了同一行,本来想在代码里完成换行操作,坚持而不懈的懒下去。然后搜到了这边文章‘’(评论是重点),原话如下,不换行才是正确的XML格式写法,因为换行的时候,从换行处到下一行字符开始,中间的部分也算是一个节点!如果你的xml要保存成文件,仅仅是为了看起来方便,建议用工具格式化就行!  一语点醒搬砖人啊!  接下来就简单了,找个格式化工具,一键格式化,搞定!参考资料如下:第一步:读取xml文件:第二步:写入xml文件:第三步:java写入xml文件时换行:第四步:xml换行格式化工具:  建议一定要想好写什么标题,或者说关键字才能尽可能准确快速的找到解决方案。嘎嘎