|
|
@@ -10,6 +10,7 @@ import java.io.IOException;
|
|
|
import java.io.Writer;
|
|
|
import java.util.Collection;
|
|
|
import java.util.Iterator;
|
|
|
+import java.util.List;
|
|
|
import java.util.function.Consumer;
|
|
|
import java.util.function.Function;
|
|
|
import java.util.function.Predicate;
|
|
|
@@ -50,52 +51,58 @@ public class CElements implements XMLElements {
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- public CQuery<Node> nodes() {
|
|
|
- return stream.map(XMLElement::node);
|
|
|
+ public List<Node> nodes() {
|
|
|
+ return stream.map(XMLElement::node).list();
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- public CQuery<String> names() {
|
|
|
- return stream.map(XMLElement::name);
|
|
|
+ public List<String> names() {
|
|
|
+ return stream.map(XMLElement::name).list();
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- public CQuery<String> xpaths() {
|
|
|
- return stream.map(XMLElement::xpath);
|
|
|
+ public List<String> xpaths() {
|
|
|
+ return stream.map(XMLElement::xpath).list();
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
public MultiMap<String, String> map() {
|
|
|
return stream.collect(MapCollectors.multimap(XMLElement::name, XMLElement::content));
|
|
|
}
|
|
|
+//
|
|
|
+// @Override
|
|
|
+// public String value() {
|
|
|
+// return StringUtils.join(values(), "");
|
|
|
+// }
|
|
|
+//
|
|
|
+// @Override
|
|
|
+// public CQuery<String> values() {
|
|
|
+// return stream.map(XMLElement::content);
|
|
|
+// }
|
|
|
+//
|
|
|
+// @Override
|
|
|
+// public <T> CQuery<T> values(Function<? super String, T> function) {
|
|
|
+// return stream.map(n -> function.apply(n.content()));
|
|
|
+// }
|
|
|
|
|
|
- @Override
|
|
|
- public CQuery<String> values() {
|
|
|
- return stream.map(XMLElement::content);
|
|
|
- }
|
|
|
-
|
|
|
@Override
|
|
|
public String content() {
|
|
|
- return StringUtils.join(stream, "", XMLElement::content);
|
|
|
+ return StringUtils.join(contents(), "");
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- public void content(Writer target) throws IOException {
|
|
|
- for(XMLElement node : stream) {
|
|
|
- target.append(node.content());
|
|
|
- }
|
|
|
+ public List<String> contents() {
|
|
|
+ return stream.map(XMLElement::content).list();
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
@Override
|
|
|
public String text() {
|
|
|
- return StringUtils.join(stream, "", XMLElement::text);
|
|
|
+ return StringUtils.join(texts(), "");
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- public void text(Writer target) throws IOException {
|
|
|
- for(XMLElement node : stream) {
|
|
|
- target.append(node.text());
|
|
|
- }
|
|
|
+ public List<String> texts() {
|
|
|
+ return stream.map(XMLElement::text).list();
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
@@ -108,14 +115,13 @@ public class CElements implements XMLElements {
|
|
|
return new CElements(stream
|
|
|
.map(n -> n.attrs())
|
|
|
.filter(n -> n.has(name))
|
|
|
- .unfold(a -> a. children(name).stream())
|
|
|
+ .map(a -> a.first(name))
|
|
|
);
|
|
|
-
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- public XMLNamespace ns() {
|
|
|
- return first().ns();
|
|
|
+ public CQuery<XMLNamespace> ns() {
|
|
|
+ return stream(XMLElement::ns);
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
@@ -128,6 +134,11 @@ public class CElements implements XMLElements {
|
|
|
return stream;
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
+ public <T> CQuery<T> stream(Function<? super XMLElement, ? extends T> function) {
|
|
|
+ return stream.map(function);
|
|
|
+ }
|
|
|
+
|
|
|
@Override
|
|
|
public XMLElements each(Consumer<? super XMLElement> consumer) {
|
|
|
stream.each(consumer);
|
|
|
@@ -195,16 +206,6 @@ public class CElements implements XMLElements {
|
|
|
public boolean matches() {
|
|
|
return !stream.isEmpty();
|
|
|
}
|
|
|
-
|
|
|
- @Override
|
|
|
- public boolean matches(String selector) {
|
|
|
- return filter(selector).matches();
|
|
|
- }
|
|
|
-
|
|
|
- @Override
|
|
|
- public boolean matches(XMLSelector selector) {
|
|
|
- return filter(selector).matches();
|
|
|
- }
|
|
|
|
|
|
XMLElements unfold(Function<XMLElement, XMLElements> function) {
|
|
|
return new CElements(stream.unfold(n -> function.apply(n).stream()));
|
|
|
@@ -215,6 +216,11 @@ public class CElements implements XMLElements {
|
|
|
CContext c = new CContext();
|
|
|
return unfold(n -> c.select(n, function));
|
|
|
}
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public XMLElements map(Function<? super XMLElement, ? extends XMLElement> function) {
|
|
|
+ return new CElements(stream(function));
|
|
|
+ }
|
|
|
|
|
|
@Override
|
|
|
public XMLElements find(String selector) {
|
|
|
@@ -317,5 +323,65 @@ public class CElements implements XMLElements {
|
|
|
public XMLElements parent(Predicate<XMLContext> selector) {
|
|
|
return unfold(n -> n.parents(selector));
|
|
|
}
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public XMLElements normalize() {
|
|
|
+ return each(n -> n.normalize());
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public XMLElements content(String value) {
|
|
|
+ return each(n -> n.content(value));
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public XMLElements text(String value) {
|
|
|
+ return each(n -> n.text(value));
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public XMLElements before(XMLElement element) {
|
|
|
+ return each(n -> n.before(element));
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public XMLElements after(XMLElement element) {
|
|
|
+ return each(n -> n.after(element));
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public XMLElements prepend(XMLElement element) {
|
|
|
+ return each(n -> n.prepend(element));
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public XMLElements append(XMLElement element) {
|
|
|
+ return each(n -> n.append(element));
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public XMLElements replace(XMLElement element) {
|
|
|
+ return each(n -> n.after(element));
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public XMLElements rename(String tagname) {
|
|
|
+ return each(n -> n.rename(tagname));
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public XMLElements remove() {
|
|
|
+ return each(n -> n.remove());
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public XMLElements wrap(String tagname) {
|
|
|
+ return each(n -> n.wrap(tagname));
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public XMLElements unwrap() {
|
|
|
+ return each(n -> n.unwrap());
|
|
|
+ }
|
|
|
|
|
|
}
|