1 9 10 package org.eclipse.help.internal.xhtml; 11 12 import java.util.Enumeration ; 13 import java.util.Properties ; 14 import java.util.Vector ; 15 16 import org.w3c.dom.Document ; 17 import org.w3c.dom.Element ; 18 import org.w3c.dom.Node ; 19 import org.w3c.dom.NodeList ; 20 21 22 26 public class DOMUtil { 27 28 public static String TAG_BODY = "body"; private static String TAG_HEAD = "head"; public static String TAG_BASE = "base"; public static String TAG_DIV = "div"; public static String TAG_HEAD_LINK = "link"; public static String TAG_FILTER = "filter"; public static String ATT_HREF = "href"; public static String ATT_REL = "rel"; public static String ATT_TYPE = "type"; public static String ATT_FILTER = "filter"; 39 40 41 42 public static void insertBase(Document dom, String baseURL) { 43 NodeList headList = dom.getElementsByTagName(TAG_HEAD); 45 Element head = (Element ) headList.item(0); 46 NodeList baseList = head.getElementsByTagName(TAG_BASE); 47 if (baseList.getLength() == 0) { 48 Element base = dom.createElement(TAG_BASE); 50 base.setAttribute(ATT_HREF, baseURL); 51 head.insertBefore(base, head.getFirstChild()); 52 } 53 } 54 55 56 public static Element getBase(Document dom) { 57 NodeList headList = dom.getElementsByTagName(TAG_HEAD); 59 Element head = (Element ) headList.item(0); 60 NodeList baseList = head.getElementsByTagName(TAG_BASE); 61 if (baseList.getLength() == 0) 62 return null; 64 65 return (Element ) baseList.item(baseList.getLength() - 1); 66 67 } 68 69 public static void insertStyle(Document dom, String cssUrl) { 70 NodeList headList = dom.getElementsByTagName(TAG_HEAD); 72 Element head = null; 73 NodeList styleList = null; 75 if (headList.getLength() >= 1) { 77 head = (Element ) headList.item(0); 78 styleList = head.getElementsByTagName(TAG_HEAD_LINK); 79 for (int i = 0; i < styleList.getLength(); i++) { 80 Element style = (Element ) styleList.item(0); 81 String styleString = style.getAttribute(ATT_HREF); 82 if (styleString.equals(cssUrl)) 83 return; 84 } 85 } 86 87 Element styleToAdd = dom.createElement(TAG_HEAD_LINK); 89 styleToAdd.setAttribute(ATT_HREF, cssUrl); 90 styleToAdd.setAttribute(ATT_REL, "stylesheet"); styleToAdd.setAttribute(ATT_TYPE, "text/css"); if (styleList != null && styleList.getLength() >= 1) 93 styleList.item(0).getParentNode().insertBefore(styleToAdd, styleList.item(0)); 94 else 95 head.appendChild(styleToAdd); 96 97 } 98 99 105 public static Element getBodyElement(Document dom) { 106 NodeList bodyList = dom.getElementsByTagName(TAG_BODY); 108 Element body = (Element ) bodyList.item(0); 109 return body; 110 } 111 112 113 114 public static Element createElement(Document dom, String elementName, Properties attributes) { 115 116 Element element = dom.createElementNS("", elementName); if (attributes != null) { 120 Enumeration e = attributes.keys(); 121 while (e.hasMoreElements()) { 122 String key = (String ) e.nextElement(); 123 element.setAttribute(key, attributes.getProperty(key)); 124 } 125 } 126 return element; 127 } 128 129 public static Element createAndAppendChild(Element parentElement, String elementName, 130 Properties attributes) { 131 132 Element element = createElement(parentElement.getOwnerDocument(), elementName, attributes); 133 parentElement.appendChild(element); 134 return element; 135 } 136 137 138 139 145 public static Element [] getElementsByTagName(Element parent, String tagName) { 146 NodeList allChildElements = parent.getElementsByTagName(tagName); 147 Vector vector = new Vector (); 148 for (int i = 0; i < allChildElements.getLength(); i++) { 149 Element aElement = (Element ) allChildElements.item(i); 151 if (aElement.getParentNode().equals(parent)) 152 vector.add(aElement); 154 } 155 Element [] filteredElements = new Element [vector.size()]; 156 vector.copyInto(filteredElements); 157 return filteredElements; 158 } 159 160 166 public static Element [] getElementsByTagName(Document dom, String tagName) { 167 NodeList allChildElements = dom.getElementsByTagName(tagName); 168 Vector vector = new Vector (); 169 for (int i = 0; i < allChildElements.getLength(); i++) { 170 Element aElement = (Element ) allChildElements.item(i); 172 if (aElement.getParentNode().equals(dom.getDocumentElement())) 173 vector.add(aElement); 176 } 177 Element [] filteredElements = new Element [vector.size()]; 178 vector.copyInto(filteredElements); 179 return filteredElements; 180 } 181 182 183 191 public static Element getElementById(Document dom, String id, String localElementName) { 192 193 NodeList children = dom.getElementsByTagNameNS("*", localElementName); for (int i = 0; i < children.getLength(); i++) { 195 Element element = (Element ) children.item(i); 196 if (element.getAttribute("id").equals(id)) return element; 198 } 199 return null; 201 202 } 203 204 205 206 207 210 public static Node [] getArray(NodeList nodeList) { 211 Node [] nodes = new Node [nodeList.getLength()]; 212 for (int i = 0; i < nodeList.getLength(); i++) 213 nodes[i] = nodeList.item(i); 214 return nodes; 215 } 216 217 218 222 public static void removeAllElements(Document dom, String elementLocalName) { 223 NodeList elements = dom.getElementsByTagNameNS("*", elementLocalName); 226 Node [] elementsArray = DOMUtil.getArray(elements); 228 for (int i = 0; i < elementsArray.length; i++) { 229 Node element = elementsArray[i]; 230 element.getParentNode().removeChild(element); 231 } 232 233 } 234 235 236 237 } 238 | Popular Tags |