Java XML: Comparer deux Nœuds DOM à partir de JBoss

Author:

Java XML: Comparer deux Nœuds DOM à partir de JBoss
{filelink=8424}

/***** Code de MesExemples.com *******/
  /** * JBoss, Home of Professional Open Source * * Distributable under LGPL license. * See terms of license at gnu.org. */import java.util.ArrayList;import java.util.List;import org.w3c.dom.NamedNodeMap;import org.w3c.dom.Node;import org.w3c.dom.NodeList;/** * @author Ovidiu Feodorov * @version $Revision: 3282 $ $Id: XMLUtil.java 3282 2007-11-01 *          15:32:29Z timfox $ */public class Utils {  public static void assertEquivalent(Node node, Node node2) {    if (node == null) {      throw new IllegalArgumentException("the first node to be compared is null");    }    if (node2 == null) {      throw new IllegalArgumentException("the second node to be compared is null");    }    if (!node.getNodeName().equals(node2.getNodeName())) {      throw new IllegalArgumentException("nodes have different node names");    }    int attrCount = 0;    NamedNodeMap attrs = node.getAttributes();    if (attrs != null) {      attrCount = attrs.getLength();    }    int attrCount2 = 0;    NamedNodeMap attrs2 = node2.getAttributes();    if (attrs2 != null) {      attrCount2 = attrs2.getLength();    }    if (attrCount != attrCount2) {      throw new IllegalArgumentException("nodes hava a different number of attributes");    }    outer: for (int i = 0; i < attrCount; i++) {      Node n = attrs.item(i);      String name = n.getNodeName();      String value = n.getNodeValue();      for (int j = 0; j < attrCount; j++) {        Node n2 = attrs2.item(j);        String name2 = n2.getNodeName();        String value2 = n2.getNodeValue();        if (name.equals(name2) && value.equals(value2)) {          continue outer;        }      }      throw new IllegalArgumentException("attribute " + name + "=" + value + " doesn't match");    }    boolean hasChildren = node.hasChildNodes();    if (hasChildren != node2.hasChildNodes()) {      throw new IllegalArgumentException("one node has children and the other doesn't");    }    if (hasChildren) {      NodeList nl = node.getChildNodes();      NodeList nl2 = node2.getChildNodes();      short[] toFilter = new short[] { Node.TEXT_NODE, Node.ATTRIBUTE_NODE, Node.COMMENT_NODE };      List nodes = filter(nl, toFilter);      List nodes2 = filter(nl2, toFilter);      int length = nodes.size();      if (length != nodes2.size()) {        throw new IllegalArgumentException("nodes hava a different number of children");      }      for (int i = 0; i < length; i++) {        Node n = (Node) nodes.get(i);        Node n2 = (Node) nodes2.get(i);        assertEquivalent(n, n2);      }    }  }  private static List filter(NodeList nl, short[] typesToFilter) {    List nodes = new ArrayList();    outer: for (int i = 0; i < nl.getLength(); i++) {      Node n = nl.item(i);      short type = n.getNodeType();      for (int j = 0; j < typesToFilter.length; j++) {        if (typesToFilter[j] == type) {          continue outer;        }      }      nodes.add(n);    }    return nodes;  }}         

Code testé avec le fichier XML Suivant




	Sakoba
	Adams
	Rappel
	Ne m'oubliez pas ce week-end!

A Voir sur le même Sujet:

  • Exemple Code Source

Leave a Reply

Your email address will not be published. Required fields are marked *