Java递归生成XML

生成XML步骤:

  1. 生成根节点(root);
  2. 判断root节点,是否有子节点,生成root节点子节点(二级节点);
  3. 判断root节点的节点(二级节点)是否有子节点(三级节点);
  4. 3这2步骤就可以写成递归,在写一个判断是否有子节点的函数和中文格式化。
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    /**
    * 创建文件的Xml
    *
    * @param filename
    * @param map
    * @return
    * @throws Exception
    */
    public Map<String, String> createXMLFile(String filename, Map<String, List<String>> map) throws Exception{
    // 存放 file下每一个对象的值
    Map<String, String> mapString = new LinkedHashMap<String, String>();
    // 取得所有key
    Set<String> set = map.keySet();
    Iterator<String> iterator = set.iterator();
    Document document = null;
    while (iterator.hasNext()) {
    // 建立document对象
    document = DocumentHelper.createDocument();
    // 加入第一个节点
    String keyString = iterator.next();
    String[] arrayString = keyString.split(",");
    String idString = arrayString[0];
    String nameString = arrayString[1];
    String pIdString = arrayString[2];
    Integer id = Integer.parseInt(arrayString[3]);
    String fileID = arrayString[4];
    String fileName = arrayString[5];
    String path = arrayString[6];
    // 判断根节点 创建root
    if ("-2".equals(pIdString)) {
    // 建立XML文档的根root
    Element rootElement = document.addElement(nameString);
    Integer nodeID = Integer.parseInt(idString);
    // 判断根节点的子节点
    isFileChild(map, rootElement, nodeID, id, fileID);
    }
    // 将document中的内容写入文件中,生成一个xml
    XMLWriter writer = new XMLWriter(new FileWriter(new java.io.File(filename)));
    writer.write(document);
    writer.close();
    // 读取xml
    StringBuilder stringBuilder = new StringBuilder();
    File file = new File(filename);
    BufferedReader bf = new BufferedReader(new FileReader(file));
    String temp;
    while ((temp = bf.readLine()) != null) {
    stringBuilder.append(temp);
    }
    //判断xml是否是空
    if (!"<?xml version=\"1.0\" encoding=\"UTF-8\"?>".equals(stringBuilder.toString())) {
    String data = stringBuilder.toString();
    String kString = id.toString() + "," + fileName + "," + path;
    mapString.put(kString, data);
    }
    }
    return mapString;
    }

    /**
    * 文件xml-获取 当前节点 是 其他节点的父节点
    *
    * @param map
    * @param element
    * 当前文件节点
    * @param nodeId
    * 当前文件content的id
    * @param id
    * @param fileID
    * 当前文件节点id
    * @throws Exception
    */
    public void isFileChild(Map<String, List<String>> map, Element element, Integer nodeId, Integer id, String fileID) throws Exception{
    Set<String> set = map.keySet();
    Iterator<String> it = set.iterator();
    while (it.hasNext()) {
    String kString = it.next();
    String[] setString = kString.split(",");
    // 当前节点id 是 其他节点的父id,当前节点有子节点, 属于同一个文件
    if (!"root".equals(setString[2]) && id == Integer.parseInt((setString[3])) && Integer.parseInt(setString[2]) == nodeId && setString[4].equals(fileID)) {
    List<String> valueList = map.get(kString);
    //创建当前节点的xml
    Element nodElement = createFileXML(element, valueList, kString);
    Integer cid = Integer.parseInt(setString[0]);
    // 查询当前节点是否有子节点,有子节点,传递当前节点
    isFileChild(map, nodElement, cid, Integer.parseInt(setString[3]), setString[4]);
    }
    }
    }

    /**
    * 创建节点的xml
    *
    * @param element
    * 当前节点
    * @param list
    * @param keyString
    * @return
    * @throws Exception
    */
    public Element createFileXML(Element element, List<String> list, String keyString) throws Exception{
    String[] kStrings = keyString.split(",");
    //添加节点
    Element nodeEle = element.addElement(kStrings[1]);
    for (int i = 0; i < list.size(); i++) {
    String data = list.get(i);
    String[] dataStrings = data.split(",");
    //添加属性
    nodeEle.addAttribute(dataStrings[0], dataStrings[1]);
    }
    return nodeEle;
    }

    /**
    * 格式化XML文档,并解决中文问题
    *
    * @param filename
    * @return
    */
    public void formatXML(Document document, String filename) throws Exception{
    XMLWriter writer = null;
    OutputFormat format = OutputFormat.createPrettyPrint();
    // 指定XML编码
    format.setEncoding("utf-8");
    //格式化XML文件
    writer = new XMLWriter(new FileWriter(new File(filename)), format);
    //输出XML文件
    writer.write(document);
    writer.close();
    }
# Java

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×