com.sun.org.apache.xpath.internal.NodeSet Java Examples

The following examples show how to use com.sun.org.apache.xpath.internal.NodeSet. You can vote up the ones you like or vote down the ones you don't like, and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example #1
Source File: ExsltMath.java    From openjdk-jdk8u with GNU General Public License v2.0 6 votes vote down vote up
/**
 * The math:highest function returns the nodes in the node set whose value is the maximum
 * value for the node set. The maximum value for the node set is the same as the value as
 * calculated by math:max. A node has this maximum value if the result of converting its
 * string value to a number as if by the number function is equal to the maximum value,
 * where the equality comparison is defined as a numerical comparison using the = operator.
 * <p>
 * If any of the nodes in the node set has a non-numeric value, the math:max function will
 * return NaN. The definition numeric comparisons entails that NaN != NaN. Therefore if any
 * of the nodes in the node set has a non-numeric value, math:highest will return an empty
 * node set.
 *
 * @param nl The NodeList for the node-set to be evaluated.
 *
 * @return node-set with nodes containing the maximum value found, an empty node-set
 * if any node cannot be converted to a number.
 */
public static NodeList highest (NodeList nl)
{
  double maxValue = max(nl);

  NodeSet highNodes = new NodeSet();
  highNodes.setShouldCacheNodes(true);

  if (Double.isNaN(maxValue))
    return highNodes;  // empty Nodeset

  for (int i = 0; i < nl.getLength(); i++)
  {
    Node n = nl.item(i);
    double d = toNumber(n);
    if (d == maxValue)
      highNodes.addElement(n);
  }
  return highNodes;
}
 
Example #2
Source File: Extensions.java    From openjdk-jdk8u with GNU General Public License v2.0 6 votes vote down vote up
/**
 * Returns a NodeSet containing one text node for each token in the first argument.
 * Delimiters are specified in the second argument.
 * Tokens are determined by a call to <code>StringTokenizer</code>.
 * If the first argument is an empty string or contains only delimiters, the result
 * will be an empty NodeSet.
 *
 * Contributed to XalanJ1 by <a href="mailto:[email protected]">Benoit Cerrina</a>.
 *
 * @param toTokenize The string to be split into text tokens.
 * @param delims The delimiters to use.
 * @return a NodeSet as described above.
 */
public static NodeList tokenize(String toTokenize, String delims)
{

  Document doc = JdkXmlUtils.getDOMDocument();

  StringTokenizer lTokenizer = new StringTokenizer(toTokenize, delims);
  NodeSet resultSet = new NodeSet();

  synchronized (doc)
  {
    while (lTokenizer.hasMoreTokens())
    {
      resultSet.addNode(doc.createTextNode(lTokenizer.nextToken()));
    }
  }

  return resultSet;
}
 
Example #3
Source File: Extensions.java    From openjdk-jdk8u with GNU General Public License v2.0 6 votes vote down vote up
/**
 * Returns true if both node-sets contain the same set of nodes.
 *
 * @param nl1 NodeList for first node-set
 * @param nl2 NodeList for second node-set
 * @return true if nl1 and nl2 contain exactly the same set of nodes.
 */
public static boolean hasSameNodes(NodeList nl1, NodeList nl2)
{

  NodeSet ns1 = new NodeSet(nl1);
  NodeSet ns2 = new NodeSet(nl2);

  if (ns1.getLength() != ns2.getLength())
    return false;

  for (int i = 0; i < ns1.getLength(); i++)
  {
    Node n = ns1.elementAt(i);

    if (!ns2.contains(n))
      return false;
  }

  return true;
}
 
Example #4
Source File: Extensions.java    From openjdk-jdk9 with GNU General Public License v2.0 6 votes vote down vote up
/**
 * Returns a NodeSet containing one text node for each token in the first argument.
 * Delimiters are specified in the second argument.
 * Tokens are determined by a call to <code>StringTokenizer</code>.
 * If the first argument is an empty string or contains only delimiters, the result
 * will be an empty NodeSet.
 *
 * Contributed to XalanJ1 by <a href="mailto:[email protected]">Benoit Cerrina</a>.
 *
 * @param toTokenize The string to be split into text tokens.
 * @param delims The delimiters to use.
 * @return a NodeSet as described above.
 */
public static NodeList tokenize(String toTokenize, String delims)
{

  Document doc = getDocument();

  StringTokenizer lTokenizer = new StringTokenizer(toTokenize, delims);
  NodeSet resultSet = new NodeSet();

  synchronized (doc)
  {
    while (lTokenizer.hasMoreTokens())
    {
      resultSet.addNode(doc.createTextNode(lTokenizer.nextToken()));
    }
  }

  return resultSet;
}
 
Example #5
Source File: ExsltSets.java    From openjdk-jdk8u with GNU General Public License v2.0 6 votes vote down vote up
/**
 * The set:difference function returns the difference between two node sets - those nodes that
 * are in the node set passed as the first argument that are not in the node set passed as the
 * second argument.
 *
 * @param nl1 NodeList for first node-set.
 * @param nl2 NodeList for second node-set.
 * @return a NodeList containing the nodes in nl1 that are not in nl2.
 *
 * @see <a href="http://www.exslt.org/">EXSLT</a>
 */
public static NodeList difference(NodeList nl1, NodeList nl2)
{
  NodeSet ns1 = new NodeSet(nl1);
  NodeSet ns2 = new NodeSet(nl2);

  NodeSet diff = new NodeSet();

  diff.setShouldCacheNodes(true);

  for (int i = 0; i < ns1.getLength(); i++)
  {
    Node n = ns1.elementAt(i);

    if (!ns2.contains(n))
      diff.addElement(n);
  }

  return diff;
}
 
Example #6
Source File: ExsltSets.java    From openjdk-jdk8u with GNU General Public License v2.0 6 votes vote down vote up
/**
 * The set:intersection function returns a node set comprising the nodes that are within
 * both the node sets passed as arguments to it.
 *
 * @param nl1 NodeList for first node-set.
 * @param nl2 NodeList for second node-set.
 * @return a NodeList containing the nodes in nl1 that are also
 * in nl2.
 *
 * @see <a href="http://www.exslt.org/">EXSLT</a>
 */
public static NodeList intersection(NodeList nl1, NodeList nl2)
{
  NodeSet ns1 = new NodeSet(nl1);
  NodeSet ns2 = new NodeSet(nl2);
  NodeSet inter = new NodeSet();

  inter.setShouldCacheNodes(true);

  for (int i = 0; i < ns1.getLength(); i++)
  {
    Node n = ns1.elementAt(i);

    if (ns2.contains(n))
      inter.addElement(n);
  }

  return inter;
}
 
Example #7
Source File: ExsltSets.java    From openjdk-jdk8u with GNU General Public License v2.0 6 votes vote down vote up
/**
 * The set:trailing function returns the nodes in the node set passed as the first argument that
 * follow, in document order, the first node in the node set passed as the second argument. If
 * the first node in the second node set is not contained in the first node set, then an empty
 * node set is returned. If the second node set is empty, then the first node set is returned.
 *
 * @param nl1 NodeList for first node-set.
 * @param nl2 NodeList for second node-set.
 * @return a NodeList containing the nodes in nl1 that follow in document order the first
 * node in nl2; an empty node-set if the first node in nl2 is not in nl1; all of nl1 if nl2
 * is empty.
 *
 * @see <a href="http://www.exslt.org/">EXSLT</a>
 */
public static NodeList trailing (NodeList nl1, NodeList nl2)
{
  if (nl2.getLength() == 0)
    return nl1;

  NodeSet ns1 = new NodeSet(nl1);
  NodeSet trailNodes = new NodeSet();
  Node startNode = nl2.item(0);
  if (!ns1.contains(startNode))
    return trailNodes; // empty NodeSet

  for (int i = 0; i < nl1.getLength(); i++)
  {
    Node testNode = nl1.item(i);
    if (DOM2Helper.isNodeAfter(startNode, testNode)
        && !DOM2Helper.isNodeTheSame(startNode, testNode))
      trailNodes.addElement(testNode);
  }
  return trailNodes;
}
 
Example #8
Source File: Extensions.java    From Bytecoder with Apache License 2.0 6 votes vote down vote up
/**
 * Returns true if both node-sets contain the same set of nodes.
 *
 * @param nl1 NodeList for first node-set
 * @param nl2 NodeList for second node-set
 * @return true if nl1 and nl2 contain exactly the same set of nodes.
 */
public static boolean hasSameNodes(NodeList nl1, NodeList nl2)
{

  NodeSet ns1 = new NodeSet(nl1);
  NodeSet ns2 = new NodeSet(nl2);

  if (ns1.getLength() != ns2.getLength())
    return false;

  for (int i = 0; i < ns1.getLength(); i++)
  {
    Node n = ns1.elementAt(i);

    if (!ns2.contains(n))
      return false;
  }

  return true;
}
 
Example #9
Source File: ExsltSets.java    From openjdk-jdk9 with GNU General Public License v2.0 6 votes vote down vote up
/**
 * The set:distinct function returns a subset of the nodes contained in the node-set NS passed
 * as the first argument. Specifically, it selects a node N if there is no node in NS that has
 * the same string value as N, and that precedes N in document order.
 *
 * @param nl NodeList for the node-set.
 * @return a NodeList with nodes from nl containing distinct string values.
 * In other words, if more than one node in nl contains the same string value,
 * only include the first such node found.
 *
 * @see <a href="http://www.exslt.org/">EXSLT</a>
 */
public static NodeList distinct(NodeList nl)
{
  NodeSet dist = new NodeSet();
  dist.setShouldCacheNodes(true);

  Map<String, Node> stringTable = new HashMap<>();

  for (int i = 0; i < nl.getLength(); i++)
  {
    Node currNode = nl.item(i);
    String key = toString(currNode);

    if (key == null)
      dist.addElement(currNode);
    else if (!stringTable.containsKey(key))
    {
      stringTable.put(key, currNode);
      dist.addElement(currNode);
    }
  }

  return dist;
}
 
Example #10
Source File: ExsltSets.java    From openjdk-jdk9 with GNU General Public License v2.0 6 votes vote down vote up
/**
 * The set:leading function returns the nodes in the node set passed as the first argument that
 * precede, in document order, the first node in the node set passed as the second argument. If
 * the first node in the second node set is not contained in the first node set, then an empty
 * node set is returned. If the second node set is empty, then the first node set is returned.
 *
 * @param nl1 NodeList for first node-set.
 * @param nl2 NodeList for second node-set.
 * @return a NodeList containing the nodes in nl1 that precede in document order the first
 * node in nl2; an empty node-set if the first node in nl2 is not in nl1; all of nl1 if nl2
 * is empty.
 *
 * @see <a href="http://www.exslt.org/">EXSLT</a>
 */
public static NodeList leading (NodeList nl1, NodeList nl2)
{
  if (nl2.getLength() == 0)
    return nl1;

  NodeSet ns1 = new NodeSet(nl1);
  NodeSet leadNodes = new NodeSet();
  Node endNode = nl2.item(0);
  if (!ns1.contains(endNode))
    return leadNodes; // empty NodeSet

  for (int i = 0; i < nl1.getLength(); i++)
  {
    Node testNode = nl1.item(i);
    if (DOMHelper.isNodeAfter(testNode, endNode)
        && !DOMHelper.isNodeTheSame(testNode, endNode))
      leadNodes.addElement(testNode);
  }
  return leadNodes;
}
 
Example #11
Source File: ExsltSets.java    From openjdk-jdk8u-backup with GNU General Public License v2.0 6 votes vote down vote up
/**
 * The set:leading function returns the nodes in the node set passed as the first argument that
 * precede, in document order, the first node in the node set passed as the second argument. If
 * the first node in the second node set is not contained in the first node set, then an empty
 * node set is returned. If the second node set is empty, then the first node set is returned.
 *
 * @param nl1 NodeList for first node-set.
 * @param nl2 NodeList for second node-set.
 * @return a NodeList containing the nodes in nl1 that precede in document order the first
 * node in nl2; an empty node-set if the first node in nl2 is not in nl1; all of nl1 if nl2
 * is empty.
 *
 * @see <a href="http://www.exslt.org/">EXSLT</a>
 */
public static NodeList leading (NodeList nl1, NodeList nl2)
{
  if (nl2.getLength() == 0)
    return nl1;

  NodeSet ns1 = new NodeSet(nl1);
  NodeSet leadNodes = new NodeSet();
  Node endNode = nl2.item(0);
  if (!ns1.contains(endNode))
    return leadNodes; // empty NodeSet

  for (int i = 0; i < nl1.getLength(); i++)
  {
    Node testNode = nl1.item(i);
    if (DOM2Helper.isNodeAfter(testNode, endNode)
        && !DOM2Helper.isNodeTheSame(testNode, endNode))
      leadNodes.addElement(testNode);
  }
  return leadNodes;
}
 
Example #12
Source File: ExsltSets.java    From openjdk-jdk8u-backup with GNU General Public License v2.0 6 votes vote down vote up
/**
 * The set:trailing function returns the nodes in the node set passed as the first argument that
 * follow, in document order, the first node in the node set passed as the second argument. If
 * the first node in the second node set is not contained in the first node set, then an empty
 * node set is returned. If the second node set is empty, then the first node set is returned.
 *
 * @param nl1 NodeList for first node-set.
 * @param nl2 NodeList for second node-set.
 * @return a NodeList containing the nodes in nl1 that follow in document order the first
 * node in nl2; an empty node-set if the first node in nl2 is not in nl1; all of nl1 if nl2
 * is empty.
 *
 * @see <a href="http://www.exslt.org/">EXSLT</a>
 */
public static NodeList trailing (NodeList nl1, NodeList nl2)
{
  if (nl2.getLength() == 0)
    return nl1;

  NodeSet ns1 = new NodeSet(nl1);
  NodeSet trailNodes = new NodeSet();
  Node startNode = nl2.item(0);
  if (!ns1.contains(startNode))
    return trailNodes; // empty NodeSet

  for (int i = 0; i < nl1.getLength(); i++)
  {
    Node testNode = nl1.item(i);
    if (DOM2Helper.isNodeAfter(startNode, testNode)
        && !DOM2Helper.isNodeTheSame(startNode, testNode))
      trailNodes.addElement(testNode);
  }
  return trailNodes;
}
 
Example #13
Source File: ExsltSets.java    From Bytecoder with Apache License 2.0 6 votes vote down vote up
/**
 * The set:distinct function returns a subset of the nodes contained in the node-set NS passed
 * as the first argument. Specifically, it selects a node N if there is no node in NS that has
 * the same string value as N, and that precedes N in document order.
 *
 * @param nl NodeList for the node-set.
 * @return a NodeList with nodes from nl containing distinct string values.
 * In other words, if more than one node in nl contains the same string value,
 * only include the first such node found.
 *
 * @see <a href="http://www.exslt.org/">EXSLT</a>
 */
public static NodeList distinct(NodeList nl)
{
  NodeSet dist = new NodeSet();
  dist.setShouldCacheNodes(true);

  Map<String, Node> stringTable = new HashMap<>();

  for (int i = 0; i < nl.getLength(); i++)
  {
    Node currNode = nl.item(i);
    String key = toString(currNode);

    if (key == null)
      dist.addElement(currNode);
    else if (!stringTable.containsKey(key))
    {
      stringTable.put(key, currNode);
      dist.addElement(currNode);
    }
  }

  return dist;
}
 
Example #14
Source File: ExsltSets.java    From openjdk-jdk8u-backup with GNU General Public License v2.0 6 votes vote down vote up
/**
 * The set:difference function returns the difference between two node sets - those nodes that
 * are in the node set passed as the first argument that are not in the node set passed as the
 * second argument.
 *
 * @param nl1 NodeList for first node-set.
 * @param nl2 NodeList for second node-set.
 * @return a NodeList containing the nodes in nl1 that are not in nl2.
 *
 * @see <a href="http://www.exslt.org/">EXSLT</a>
 */
public static NodeList difference(NodeList nl1, NodeList nl2)
{
  NodeSet ns1 = new NodeSet(nl1);
  NodeSet ns2 = new NodeSet(nl2);

  NodeSet diff = new NodeSet();

  diff.setShouldCacheNodes(true);

  for (int i = 0; i < ns1.getLength(); i++)
  {
    Node n = ns1.elementAt(i);

    if (!ns2.contains(n))
      diff.addElement(n);
  }

  return diff;
}
 
Example #15
Source File: ExsltSets.java    From openjdk-jdk8u-backup with GNU General Public License v2.0 6 votes vote down vote up
/**
 * The set:distinct function returns a subset of the nodes contained in the node-set NS passed
 * as the first argument. Specifically, it selects a node N if there is no node in NS that has
 * the same string value as N, and that precedes N in document order.
 *
 * @param nl NodeList for the node-set.
 * @return a NodeList with nodes from nl containing distinct string values.
 * In other words, if more than one node in nl contains the same string value,
 * only include the first such node found.
 *
 * @see <a href="http://www.exslt.org/">EXSLT</a>
 */
public static NodeList distinct(NodeList nl)
{
  NodeSet dist = new NodeSet();
  dist.setShouldCacheNodes(true);

  Map<String, Node> stringTable = new HashMap<>();

  for (int i = 0; i < nl.getLength(); i++)
  {
    Node currNode = nl.item(i);
    String key = toString(currNode);

    if (key == null)
      dist.addElement(currNode);
    else if (!stringTable.containsKey(key))
    {
      stringTable.put(key, currNode);
      dist.addElement(currNode);
    }
  }

  return dist;
}
 
Example #16
Source File: ExsltSets.java    From openjdk-jdk8u with GNU General Public License v2.0 6 votes vote down vote up
/**
 * The set:leading function returns the nodes in the node set passed as the first argument that
 * precede, in document order, the first node in the node set passed as the second argument. If
 * the first node in the second node set is not contained in the first node set, then an empty
 * node set is returned. If the second node set is empty, then the first node set is returned.
 *
 * @param nl1 NodeList for first node-set.
 * @param nl2 NodeList for second node-set.
 * @return a NodeList containing the nodes in nl1 that precede in document order the first
 * node in nl2; an empty node-set if the first node in nl2 is not in nl1; all of nl1 if nl2
 * is empty.
 *
 * @see <a href="http://www.exslt.org/">EXSLT</a>
 */
public static NodeList leading (NodeList nl1, NodeList nl2)
{
  if (nl2.getLength() == 0)
    return nl1;

  NodeSet ns1 = new NodeSet(nl1);
  NodeSet leadNodes = new NodeSet();
  Node endNode = nl2.item(0);
  if (!ns1.contains(endNode))
    return leadNodes; // empty NodeSet

  for (int i = 0; i < nl1.getLength(); i++)
  {
    Node testNode = nl1.item(i);
    if (DOM2Helper.isNodeAfter(testNode, endNode)
        && !DOM2Helper.isNodeTheSame(testNode, endNode))
      leadNodes.addElement(testNode);
  }
  return leadNodes;
}
 
Example #17
Source File: ExsltMath.java    From JDKSourceCode1.8 with MIT License 6 votes vote down vote up
/**
 * The math:lowest function returns the nodes in the node set whose value is the minimum value
 * for the node set. The minimum value for the node set is the same as the value as calculated
 * by math:min. A node has this minimum value if the result of converting its string value to
 * a number as if by the number function is equal to the minimum value, where the equality
 * comparison is defined as a numerical comparison using the = operator.
 * <p>
 * If any of the nodes in the node set has a non-numeric value, the math:min function will return
 * NaN. The definition numeric comparisons entails that NaN != NaN. Therefore if any of the nodes
 * in the node set has a non-numeric value, math:lowest will return an empty node set.
 *
 * @param nl The NodeList for the node-set to be evaluated.
 *
 * @return node-set with nodes containing the minimum value found, an empty node-set
 * if any node cannot be converted to a number.
 *
 */
public static NodeList lowest (NodeList nl)
{
  double minValue = min(nl);

  NodeSet lowNodes = new NodeSet();
  lowNodes.setShouldCacheNodes(true);

  if (Double.isNaN(minValue))
    return lowNodes;  // empty Nodeset

  for (int i = 0; i < nl.getLength(); i++)
  {
    Node n = nl.item(i);
    double d = toNumber(n);
    if (d == minValue)
      lowNodes.addElement(n);
  }
  return lowNodes;
}
 
Example #18
Source File: Extensions.java    From openjdk-jdk8u-backup with GNU General Public License v2.0 6 votes vote down vote up
/**
 * Returns a NodeSet containing one text node for each token in the first argument.
 * Delimiters are specified in the second argument.
 * Tokens are determined by a call to <code>StringTokenizer</code>.
 * If the first argument is an empty string or contains only delimiters, the result
 * will be an empty NodeSet.
 *
 * Contributed to XalanJ1 by <a href="mailto:[email protected]">Benoit Cerrina</a>.
 *
 * @param toTokenize The string to be split into text tokens.
 * @param delims The delimiters to use.
 * @return a NodeSet as described above.
 */
public static NodeList tokenize(String toTokenize, String delims)
{

  Document doc = JdkXmlUtils.getDOMDocument();

  StringTokenizer lTokenizer = new StringTokenizer(toTokenize, delims);
  NodeSet resultSet = new NodeSet();

  synchronized (doc)
  {
    while (lTokenizer.hasMoreTokens())
    {
      resultSet.addNode(doc.createTextNode(lTokenizer.nextToken()));
    }
  }

  return resultSet;
}
 
Example #19
Source File: ExsltSets.java    From openjdk-jdk9 with GNU General Public License v2.0 6 votes vote down vote up
/**
 * The set:intersection function returns a node set comprising the nodes that are within
 * both the node sets passed as arguments to it.
 *
 * @param nl1 NodeList for first node-set.
 * @param nl2 NodeList for second node-set.
 * @return a NodeList containing the nodes in nl1 that are also
 * in nl2.
 *
 * @see <a href="http://www.exslt.org/">EXSLT</a>
 */
public static NodeList intersection(NodeList nl1, NodeList nl2)
{
  NodeSet ns1 = new NodeSet(nl1);
  NodeSet ns2 = new NodeSet(nl2);
  NodeSet inter = new NodeSet();

  inter.setShouldCacheNodes(true);

  for (int i = 0; i < ns1.getLength(); i++)
  {
    Node n = ns1.elementAt(i);

    if (ns2.contains(n))
      inter.addElement(n);
  }

  return inter;
}
 
Example #20
Source File: Extensions.java    From JDKSourceCode1.8 with MIT License 6 votes vote down vote up
/**
 * Returns a NodeSet containing one text node for each token in the first argument.
 * Delimiters are specified in the second argument.
 * Tokens are determined by a call to <code>StringTokenizer</code>.
 * If the first argument is an empty string or contains only delimiters, the result
 * will be an empty NodeSet.
 *
 * Contributed to XalanJ1 by <a href="mailto:[email protected]">Benoit Cerrina</a>.
 *
 * @param toTokenize The string to be split into text tokens.
 * @param delims The delimiters to use.
 * @return a NodeSet as described above.
 */
public static NodeList tokenize(String toTokenize, String delims)
{

  Document doc = JdkXmlUtils.getDOMDocument();

  StringTokenizer lTokenizer = new StringTokenizer(toTokenize, delims);
  NodeSet resultSet = new NodeSet();

  synchronized (doc)
  {
    while (lTokenizer.hasMoreTokens())
    {
      resultSet.addNode(doc.createTextNode(lTokenizer.nextToken()));
    }
  }

  return resultSet;
}
 
Example #21
Source File: ExsltSets.java    From JDKSourceCode1.8 with MIT License 6 votes vote down vote up
/**
 * The set:distinct function returns a subset of the nodes contained in the node-set NS passed
 * as the first argument. Specifically, it selects a node N if there is no node in NS that has
 * the same string value as N, and that precedes N in document order.
 *
 * @param nl NodeList for the node-set.
 * @return a NodeList with nodes from nl containing distinct string values.
 * In other words, if more than one node in nl contains the same string value,
 * only include the first such node found.
 *
 * @see <a href="http://www.exslt.org/">EXSLT</a>
 */
public static NodeList distinct(NodeList nl)
{
  NodeSet dist = new NodeSet();
  dist.setShouldCacheNodes(true);

  Map<String, Node> stringTable = new HashMap<>();

  for (int i = 0; i < nl.getLength(); i++)
  {
    Node currNode = nl.item(i);
    String key = toString(currNode);

    if (key == null)
      dist.addElement(currNode);
    else if (!stringTable.containsKey(key))
    {
      stringTable.put(key, currNode);
      dist.addElement(currNode);
    }
  }

  return dist;
}
 
Example #22
Source File: ExsltSets.java    From JDKSourceCode1.8 with MIT License 6 votes vote down vote up
/**
 * The set:difference function returns the difference between two node sets - those nodes that
 * are in the node set passed as the first argument that are not in the node set passed as the
 * second argument.
 *
 * @param nl1 NodeList for first node-set.
 * @param nl2 NodeList for second node-set.
 * @return a NodeList containing the nodes in nl1 that are not in nl2.
 *
 * @see <a href="http://www.exslt.org/">EXSLT</a>
 */
public static NodeList difference(NodeList nl1, NodeList nl2)
{
  NodeSet ns1 = new NodeSet(nl1);
  NodeSet ns2 = new NodeSet(nl2);

  NodeSet diff = new NodeSet();

  diff.setShouldCacheNodes(true);

  for (int i = 0; i < ns1.getLength(); i++)
  {
    Node n = ns1.elementAt(i);

    if (!ns2.contains(n))
      diff.addElement(n);
  }

  return diff;
}
 
Example #23
Source File: ExsltSets.java    From JDKSourceCode1.8 with MIT License 6 votes vote down vote up
/**
 * The set:intersection function returns a node set comprising the nodes that are within
 * both the node sets passed as arguments to it.
 *
 * @param nl1 NodeList for first node-set.
 * @param nl2 NodeList for second node-set.
 * @return a NodeList containing the nodes in nl1 that are also
 * in nl2.
 *
 * @see <a href="http://www.exslt.org/">EXSLT</a>
 */
public static NodeList intersection(NodeList nl1, NodeList nl2)
{
  NodeSet ns1 = new NodeSet(nl1);
  NodeSet ns2 = new NodeSet(nl2);
  NodeSet inter = new NodeSet();

  inter.setShouldCacheNodes(true);

  for (int i = 0; i < ns1.getLength(); i++)
  {
    Node n = ns1.elementAt(i);

    if (ns2.contains(n))
      inter.addElement(n);
  }

  return inter;
}
 
Example #24
Source File: ExsltSets.java    From JDKSourceCode1.8 with MIT License 6 votes vote down vote up
/**
 * The set:trailing function returns the nodes in the node set passed as the first argument that
 * follow, in document order, the first node in the node set passed as the second argument. If
 * the first node in the second node set is not contained in the first node set, then an empty
 * node set is returned. If the second node set is empty, then the first node set is returned.
 *
 * @param nl1 NodeList for first node-set.
 * @param nl2 NodeList for second node-set.
 * @return a NodeList containing the nodes in nl1 that follow in document order the first
 * node in nl2; an empty node-set if the first node in nl2 is not in nl1; all of nl1 if nl2
 * is empty.
 *
 * @see <a href="http://www.exslt.org/">EXSLT</a>
 */
public static NodeList trailing (NodeList nl1, NodeList nl2)
{
  if (nl2.getLength() == 0)
    return nl1;

  NodeSet ns1 = new NodeSet(nl1);
  NodeSet trailNodes = new NodeSet();
  Node startNode = nl2.item(0);
  if (!ns1.contains(startNode))
    return trailNodes; // empty NodeSet

  for (int i = 0; i < nl1.getLength(); i++)
  {
    Node testNode = nl1.item(i);
    if (DOM2Helper.isNodeAfter(startNode, testNode)
        && !DOM2Helper.isNodeTheSame(startNode, testNode))
      trailNodes.addElement(testNode);
  }
  return trailNodes;
}
 
Example #25
Source File: ExsltMath.java    From Bytecoder with Apache License 2.0 6 votes vote down vote up
/**
 * The math:highest function returns the nodes in the node set whose value is the maximum
 * value for the node set. The maximum value for the node set is the same as the value as
 * calculated by math:max. A node has this maximum value if the result of converting its
 * string value to a number as if by the number function is equal to the maximum value,
 * where the equality comparison is defined as a numerical comparison using the = operator.
 * <p>
 * If any of the nodes in the node set has a non-numeric value, the math:max function will
 * return NaN. The definition numeric comparisons entails that NaN != NaN. Therefore if any
 * of the nodes in the node set has a non-numeric value, math:highest will return an empty
 * node set.
 *
 * @param nl The NodeList for the node-set to be evaluated.
 *
 * @return node-set with nodes containing the maximum value found, an empty node-set
 * if any node cannot be converted to a number.
 */
public static NodeList highest (NodeList nl)
{
  double maxValue = max(nl);

  NodeSet highNodes = new NodeSet();
  highNodes.setShouldCacheNodes(true);

  if (Double.isNaN(maxValue))
    return highNodes;  // empty Nodeset

  for (int i = 0; i < nl.getLength(); i++)
  {
    Node n = nl.item(i);
    double d = toNumber(n);
    if (d == maxValue)
      highNodes.addElement(n);
  }
  return highNodes;
}
 
Example #26
Source File: ExsltSets.java    From Bytecoder with Apache License 2.0 6 votes vote down vote up
/**
 * The set:intersection function returns a node set comprising the nodes that are within
 * both the node sets passed as arguments to it.
 *
 * @param nl1 NodeList for first node-set.
 * @param nl2 NodeList for second node-set.
 * @return a NodeList containing the nodes in nl1 that are also
 * in nl2.
 *
 * @see <a href="http://www.exslt.org/">EXSLT</a>
 */
public static NodeList intersection(NodeList nl1, NodeList nl2)
{
  NodeSet ns1 = new NodeSet(nl1);
  NodeSet ns2 = new NodeSet(nl2);
  NodeSet inter = new NodeSet();

  inter.setShouldCacheNodes(true);

  for (int i = 0; i < ns1.getLength(); i++)
  {
    Node n = ns1.elementAt(i);

    if (ns2.contains(n))
      inter.addElement(n);
  }

  return inter;
}
 
Example #27
Source File: Extensions.java    From jdk8u60 with GNU General Public License v2.0 6 votes vote down vote up
/**
 * Returns a NodeSet containing one text node for each token in the first argument.
 * Delimiters are specified in the second argument.
 * Tokens are determined by a call to <code>StringTokenizer</code>.
 * If the first argument is an empty string or contains only delimiters, the result
 * will be an empty NodeSet.
 *
 * Contributed to XalanJ1 by <a href="mailto:[email protected]">Benoit Cerrina</a>.
 *
 * @param toTokenize The string to be split into text tokens.
 * @param delims The delimiters to use.
 * @return a NodeSet as described above.
 */
public static NodeList tokenize(String toTokenize, String delims)
{

  Document doc = getDocument();

  StringTokenizer lTokenizer = new StringTokenizer(toTokenize, delims);
  NodeSet resultSet = new NodeSet();

  synchronized (doc)
  {
    while (lTokenizer.hasMoreTokens())
    {
      resultSet.addNode(doc.createTextNode(lTokenizer.nextToken()));
    }
  }

  return resultSet;
}
 
Example #28
Source File: ExsltSets.java    From jdk8u60 with GNU General Public License v2.0 6 votes vote down vote up
/**
 * The set:distinct function returns a subset of the nodes contained in the node-set NS passed
 * as the first argument. Specifically, it selects a node N if there is no node in NS that has
 * the same string value as N, and that precedes N in document order.
 *
 * @param nl NodeList for the node-set.
 * @return a NodeList with nodes from nl containing distinct string values.
 * In other words, if more than one node in nl contains the same string value,
 * only include the first such node found.
 *
 * @see <a href="http://www.exslt.org/">EXSLT</a>
 */
public static NodeList distinct(NodeList nl)
{
  NodeSet dist = new NodeSet();
  dist.setShouldCacheNodes(true);

  Hashtable stringTable = new Hashtable();

  for (int i = 0; i < nl.getLength(); i++)
  {
    Node currNode = nl.item(i);
    String key = toString(currNode);

    if (key == null)
      dist.addElement(currNode);
    else if (!stringTable.containsKey(key))
    {
      stringTable.put(key, currNode);
      dist.addElement(currNode);
    }
  }

  return dist;
}
 
Example #29
Source File: ExsltSets.java    From jdk8u60 with GNU General Public License v2.0 6 votes vote down vote up
/**
 * The set:difference function returns the difference between two node sets - those nodes that
 * are in the node set passed as the first argument that are not in the node set passed as the
 * second argument.
 *
 * @param nl1 NodeList for first node-set.
 * @param nl2 NodeList for second node-set.
 * @return a NodeList containing the nodes in nl1 that are not in nl2.
 *
 * @see <a href="http://www.exslt.org/">EXSLT</a>
 */
public static NodeList difference(NodeList nl1, NodeList nl2)
{
  NodeSet ns1 = new NodeSet(nl1);
  NodeSet ns2 = new NodeSet(nl2);

  NodeSet diff = new NodeSet();

  diff.setShouldCacheNodes(true);

  for (int i = 0; i < ns1.getLength(); i++)
  {
    Node n = ns1.elementAt(i);

    if (!ns2.contains(n))
      diff.addElement(n);
  }

  return diff;
}
 
Example #30
Source File: ExsltSets.java    From jdk8u60 with GNU General Public License v2.0 6 votes vote down vote up
/**
 * The set:intersection function returns a node set comprising the nodes that are within
 * both the node sets passed as arguments to it.
 *
 * @param nl1 NodeList for first node-set.
 * @param nl2 NodeList for second node-set.
 * @return a NodeList containing the nodes in nl1 that are also
 * in nl2.
 *
 * @see <a href="http://www.exslt.org/">EXSLT</a>
 */
public static NodeList intersection(NodeList nl1, NodeList nl2)
{
  NodeSet ns1 = new NodeSet(nl1);
  NodeSet ns2 = new NodeSet(nl2);
  NodeSet inter = new NodeSet();

  inter.setShouldCacheNodes(true);

  for (int i = 0; i < ns1.getLength(); i++)
  {
    Node n = ns1.elementAt(i);

    if (ns2.contains(n))
      inter.addElement(n);
  }

  return inter;
}