
com.github.fluentxml4j.internal.query.SelectMultipleFromNodeImpl Maven / Gradle / Ivy
package com.github.fluentxml4j.internal.query;
import com.github.fluentxml4j.FluentXmlProcessingException;
import com.github.fluentxml4j.query.SelectMultipleFromNode;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathException;
import javax.xml.xpath.XPathExpression;
import java.util.Iterator;
import java.util.List;
import java.util.function.Function;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import java.util.stream.StreamSupport;
class SelectMultipleFromNodeImpl implements SelectMultipleFromNode
{
private Node baseNode;
private XPathExpression xPathExpression;
private Function nodeConverter;
SelectMultipleFromNodeImpl(Node baseNode, XPathExpression xPathExpression, Function nodeConverter)
{
this.baseNode = baseNode;
this.xPathExpression = xPathExpression;
this.nodeConverter = nodeConverter;
}
@Override
public Iterator iterator()
{
return iterate().iterator();
}
@Deprecated
@Override
public Iterable iterate()
{
NodeList nodeList = asNodeList();
return () -> new NodeListIterator<>(nodeList, this.nodeConverter);
}
@Override
public Stream asStream()
{
return StreamSupport.stream(iterate().spliterator(), true);
}
@Override
public NodeList asNodeList()
{
try
{
return (NodeList) this.xPathExpression.evaluate(this.baseNode, XPathConstants.NODESET);
}
catch (XPathException ex)
{
throw new FluentXmlProcessingException(ex);
}
}
@Override
public List asList()
{
return asStream().collect(Collectors.toList());
}
@Override
public int count()
{
return asNodeList().getLength();
}
@Override
public boolean empty()
{
return count() == 0;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy