1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.felix.obrplugin;
20
21
22 import org.w3c.dom.Node;
23 import org.w3c.dom.NodeList;
24
25
26
27
28
29
30
31 public class XmlHelper
32 {
33
34
35
36 public static String getTextContent( Node node )
37 {
38 switch ( node.getNodeType() )
39 {
40 case Node.ELEMENT_NODE:
41 case Node.ATTRIBUTE_NODE:
42 case Node.ENTITY_NODE:
43 case Node.ENTITY_REFERENCE_NODE:
44 case Node.DOCUMENT_FRAGMENT_NODE:
45 return mergeTextContent( node.getChildNodes() );
46 case Node.TEXT_NODE:
47 case Node.CDATA_SECTION_NODE:
48 case Node.COMMENT_NODE:
49 case Node.PROCESSING_INSTRUCTION_NODE:
50 return node.getNodeValue();
51 case Node.DOCUMENT_NODE:
52 case Node.DOCUMENT_TYPE_NODE:
53 case Node.NOTATION_NODE:
54 default:
55 return null;
56 }
57 }
58
59
60
61
62
63
64
65
66 private static String mergeTextContent( NodeList nodes )
67 {
68 StringBuffer buf = new StringBuffer();
69 for ( int i = 0; i < nodes.getLength(); i++ )
70 {
71 Node n = nodes.item( i );
72 final String text;
73
74 switch ( n.getNodeType() )
75 {
76 case Node.COMMENT_NODE:
77 case Node.PROCESSING_INSTRUCTION_NODE:
78 text = null;
79 break;
80 default:
81 text = getTextContent( n );
82 break;
83 }
84
85 if ( text != null )
86 {
87 buf.append( text );
88 }
89 }
90 return buf.toString();
91 }
92
93
94
95
96
97 public static void setTextContent( Node node, final String text )
98 {
99 while ( node.hasChildNodes() )
100 {
101 node.removeChild( node.getFirstChild() );
102 }
103
104 if ( text != null && text.length() > 0 )
105 {
106 Node textNode = node.getOwnerDocument().createTextNode( text );
107 node.appendChild( textNode );
108 }
109 }
110 }