View Javadoc
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   * @author hooy
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  }