首页 > 解决方案 > 从Java中的Xml获取元素内的评论元素

问题描述

**`我在 jaxb 中解析 xml 时遇到问题,它删除了注释节点。为此,我创建了一个方法,我将 xml 标记和路径存储在 map 中,稍后在 jaxb 中解析 xml 后再次放置和安排正确的路径对于那些评论。存储在地图中。然后通过创建评论节点并使用 node.insertBefore(createComment, refChild) 方法放置这些评论。建议。我在 jaxb 中解析 xml 时遇到问题,它删除了注释节点。为此,我创建了一个方法,我将 xml 标记和路径存储在 map 中,稍后在 jaxb 中解析 xml 后再次放置和安排正确的路径那些评论。存储在地图中。然后通过创建评论节点并使用 node.insertBefore(createComment, refChild) 方法放置这些评论。建议。我在 jaxb 中解析 xml 时遇到问题,它删除了评论节点。为此,我创建了一种方法,我将 xml 标记和路径存储在 map 中,稍后在 jaxb 中解析 xml 后再次放置和安排这些注释的正确路径。存储在地图中。然后通过创建评论节点并使用 node.insertBefore(createComment, refChild) 方法放置这些评论。

我的问题是,在更新这个 xml 文件后,它变得像,

由于 node.insertBefore() 方法,注释行放置在第一个位置和第二个位置。任何人都可以建议如何克服它并将该值尽快放在以前的相同位置`**

private static void updateComments(final Document document, final Map<String, Comment> commentNodeMap,
      final Map<String, Node> elementNodeMap, final Map<Comment, Integer> commentIntMap) {
    Set<String> keys = new TreeSet<>(new Comparator<String>() {
      @Override
      public int compare(final String s1, final String s2) {
        if (s1.length() != s2.length()) {
          return s1.length() - s2.length();
        }
        String[] split1 = s1.split(Constants.COMMENT_SEPARATOR);
        String[] split2 = s2.split(Constants.COMMENT_SEPARATOR);
        Integer i1 = Integer.parseInt(split1[0]);
        Integer i2 = Integer.parseInt(split2[0]);
        if (((i1 - i2) == 0) && !split1[1].equals(split2[1])) {
          return split1[1].compareTo(split2[1]);
        }
        return i1 - i2;
      }
    });
    keys.addAll(commentNodeMap.keySet());
    for (String exp : keys) {
      String[] split2 = exp.split(Constants.COMMENT_SEPARATOR);
      Node node = elementNodeMap.get(split2[1]);
      if (node != null) {
        Comment comment = commentNodeMap.get(exp);
        List<Node> updatedNList = new ArrayList<>();
        for (int i = 0; i < node.getChildNodes().getLength(); i++) {
          updatedNList.add(node.getChildNodes().item(i));
        }
        Integer integer = commentIntMap.get(comment);
        if (integer != null) {
          Comment createComment = document.createComment(comment.getData());
          updatedNList.add(integer, createComment);
          if ((integer + 1) < updatedNList.size()) {
            Node refChild = updatedNList.get(integer + 1);
            node.insertBefore(createComment, refChild);
          }
          else {
            node.appendChild(createComment);
          }
        }
      }
    }
  }

Xml Code before:

<shipments>
      <shipment id="011">
        <department>XXXX<!--ProductXXXXX--></department>
      </shipment>   
 </shipments>

之后的 XML 代码:

<shipments>
      <shipment id="011">
        <department><!--ProductXXXXX-->XXXX</department>
      </shipment>   
 </shipments>

Thanks in advance

标签: javaxmlnodes

解决方案


推荐阅读