1 package us.codecraft.webmagic.selector;
2
3 import org.w3c.dom.Node;
4 import org.w3c.dom.NodeList;
5
6 import javax.xml.transform.OutputKeys;
7 import javax.xml.transform.Transformer;
8 import javax.xml.transform.TransformerException;
9 import javax.xml.transform.TransformerFactory;
10 import javax.xml.transform.dom.DOMSource;
11 import javax.xml.transform.stream.StreamResult;
12 import java.io.StringWriter;
13 import java.util.ArrayList;
14 import java.util.Collections;
15 import java.util.List;
16
17
18
19
20 public final class JaxpSelectorUtils {
21
22 private JaxpSelectorUtils() {
23 throw new RuntimeException("The util class cannot be instanced");
24 }
25
26 public static List<Node> NodeListToArrayList(NodeList nodes) {
27 List<Node> list = new ArrayList<>(nodes.getLength());
28 for (int i = 0; i < nodes.getLength(); i++) {
29 list.add(nodes.item(i));
30 }
31 return list;
32 }
33
34 public static String nodeToString(Node node) throws TransformerException {
35 List<Node> before = Collections.singletonList(node);
36 List<String> after = nodesToStrings(before);
37 if (after.size() > 0) {
38 return after.get(0);
39 } else {
40 return null;
41 }
42 }
43
44 public static List<String> nodesToStrings(List<Node> nodes) throws TransformerException {
45 List<String> results = new ArrayList<>(nodes.size());
46 Transformer transformer = TransformerFactory.newInstance().newTransformer();
47 StreamResult xmlOutput = new StreamResult();
48 transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
49 for (Node node : nodes) {
50 if (node.getNodeType() == Node.ATTRIBUTE_NODE || node.getNodeType() == Node.TEXT_NODE) {
51 results.add(node.getTextContent());
52 } else {
53 xmlOutput.setWriter(new StringWriter());
54 transformer.transform(new DOMSource(node), xmlOutput);
55 results.add(xmlOutput.getWriter().toString());
56 }
57 }
58 return results;
59 }
60
61 }