Java/XML/DOM Element
Содержание
- 1 Add an entity to a specified Element.
- 2 Add a new element to the given parent
- 3 Adds the child element with the given text
- 4 Add Text object to an Element.
- 5 Clean text from Node
- 6 Compare two DOM Nodes
- 7 Compare two DOM Nodes from JBoss
- 8 Convert Element To Stream
- 9 Convert node element To String
- 10 Create a new element
- 11 Create New Container
- 12 Create New Element And Set
- 13 Create New Element And Set Attribute
- 14 DOM helper for root element
- 15 DOM Util: get Element Text
- 16 Find All Elements By Tag Name
- 17 Find All Elements By Tag Name Name Space
- 18 Find Container Else Create One
- 19 Find Element And Set Or Create And Set
- 20 Find Element Or Container
- 21 Find Element Or Create And Attribute
- 22 Find Element Or Create And Set
- 23 Find Element Or Create And Set Attribute
- 24 Get child from an element by name
- 25 Get content from element
- 26 Get Element Boolean Value
- 27 Get Element Date Value
- 28 Get Element Float Value
- 29 Get Element Int Value
- 30 Get Element Long Value
- 31 Get Element QName
- 32 Get Elements by parent element
- 33 Get Element String Value
- 34 Get Element Text
- 35 Get First Element
- 36 Get Next Element
- 37 Get the content of an optional child element
- 38 Get the content of the given element.
- 39 Get the first child element
- 40 Get the first element child.
- 41 Get the first text node associated with this element
- 42 Get the next sibling element
- 43 Get the next sibling with the same name and type
- 44 Get the raw text content of a node or null if there is no text
- 45 Get the specified text node associated with this element
- 46 Get the trimed text content of a node or null if there is no text
- 47 Get trimmed text content of a node or null if there is no text
- 48 Has Attribute
- 49 Import Elements
- 50 Macro to get the content of a unique child element.
- 51 Moves the content of the given element to the given element
- 52 Remove Attribute
- 53 Return a list of named Elements.
- 54 Return a list of named Elements with a specific attribute value.
- 55 Return child elements with specified name.
- 56 Returns a list of child elements with the given name.
- 57 Returns an array of text values of a child element.
- 58 Returns text value of a child element. Returns null if there is no child element found.
- 59 Returns the first child element with the given name.
- 60 Returns the first element that has the specified local name.
- 61 Returns the text of the element
- 62 Return the first named Element found. Null if none.
- 63 Use the Document.getElementsByTagName() method to quickly and easily locate elements by name.
Add an entity to a specified Element.
<source lang="java">
import org.w3c.dom.Document; import org.w3c.dom.Element; public class Utils {
/**
* Add an entity to a specified Element.
* (eg DomUtils.addEntity(element, "nbsp");
)
* @param element the containing element
* @param entity the entity to add
*/
public static void addEntity(Element element, String entity) {
element.appendChild(element.getOwnerDocument().createEntityReference(entity));
}
}
</source>
Add a new element to the given parent
<source lang="java">
import org.w3c.dom.Document; import org.w3c.dom.Element; public class Utils {
/** * Add a new element to the given parent * @param parent the parent Element * @param name the child name * @return new Element */ public static Element createElement(Element parent, String name) { Document document; Element element; document = parent.getOwnerDocument(); element = document.createElement(name); parent.appendChild(element); return element; }
}
</source>
Adds the child element with the given text
<source lang="java">
import org.w3c.dom.Document; import org.w3c.dom.Element; public class Utils {
public static void addChildElement(Element element, String name, Object textValue) { Document document = element.getOwnerDocument(); Element child = document.createElement(name); element.appendChild(child); if (textValue != null) { String text = textValue.toString(); child.appendChild(document.createTextNode(text)); } }
}
</source>
Add Text object to an Element.
<source lang="java">
import org.w3c.dom.Document; import org.w3c.dom.Element; public class Utils {
/** * Add Text object to an Element. * @param element the containing element * @param text the text to add */ public static void addText(Element element, String text) { element.appendChild(element.getOwnerDocument().createTextNode(text)); }
}
</source>
Clean text from Node
<source lang="java">
/*
* The Apache Software License, Version 1.1 * * Copyright (c) 2000-2002 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, if * any, must include the following acknowlegement: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowlegement may appear in the software itself, * if and wherever such third-party acknowlegements normally appear. * * 4. The names "The Jakarta Project", "Ant", and "Apache Software * Foundation" must not be used to endorse or promote products derived * from this software without prior written permission. For written * permission, please contact apache@apache.org. * * 5. Products derived from this software may not be called "Apache" * nor may "Apache" appear in their names without prior written * permission of the Apache Group. * * THIS SOFTWARE IS PROVIDED ``AS IS"" AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * <http://www.apache.org/>. */
import java.util.Vector; import org.w3c.dom.NamedNodeMap; import org.w3c.dom.Node; import org.w3c.dom.NodeList;
/**
* * @author Abey Mullassery * */
public class Main {
public static void cleanText(Node node) { try { NodeList childNodes = node.getChildNodes(); int noChildren = childNodes.getLength(); Node n = null; short type = 0; Vector rem = new Vector(); for (int i = 0; i < noChildren; i++) { n = childNodes.item(i); type = n.getNodeType(); if (type == Node.TEXT_NODE) { rem.add(n); } else if (type == Node.ELEMENT_NODE) { cleanText(n); } } for (int i = 0; i < rem.size(); i++) { node.removeChild((Node) rem.get(i)); } } catch (Exception e) { //DebugUtil.debug(e); } }
}
</source>
Compare two DOM Nodes
<source lang="java">
/**
* Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */
import java.util.ArrayList; import java.util.List; import org.w3c.dom.Attr; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.NamedNodeMap; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.w3c.dom.Text; /**
* @version $Rev: 514087 $ $Date: 2007-03-03 01:13:40 -0500 (Sat, 03 Mar 2007) $ */
public class DOMUtils {
private static void trimEmptyTextNodes(Node node) { Element element = null; if (node instanceof Document) { element = ((Document) node).getDocumentElement(); } else if (node instanceof Element) { element = (Element) node; } else { return; } List<Node> nodesToRemove = new ArrayList<Node>(); NodeList children = element.getChildNodes(); for (int i = 0; i < children.getLength(); i++) { Node child = children.item(i); if (child instanceof Element) { trimEmptyTextNodes(child); } else if (child instanceof Text) { Text t = (Text) child; if (t.getData().trim().length() == 0) { nodesToRemove.add(child); } } } for (Node n : nodesToRemove) { element.removeChild(n); } } public static void compareNodes(Node expected, Node actual, boolean trimEmptyTextNodes) throws Exception { if (trimEmptyTextNodes) { trimEmptyTextNodes(expected); trimEmptyTextNodes(actual); } compareNodes(expected, actual); } public static void compareNodes(Node expected, Node actual) throws Exception { if (expected.getNodeType() != actual.getNodeType()) { throw new Exception("Different types of nodes: " + expected + " " + actual); } if (expected instanceof Document) { Document expectedDoc = (Document) expected; Document actualDoc = (Document) actual; compareNodes(expectedDoc.getDocumentElement(), actualDoc.getDocumentElement()); } else if (expected instanceof Element) { Element expectedElement = (Element) expected; Element actualElement = (Element) actual; // compare element names if (!expectedElement.getLocalName().equals(actualElement.getLocalName())) { throw new Exception("Element names do not match: " + expectedElement.getLocalName() + " " + actualElement.getLocalName()); } // compare element ns String expectedNS = expectedElement.getNamespaceURI(); String actualNS = actualElement.getNamespaceURI(); if ((expectedNS == null && actualNS != null) || (expectedNS != null && !expectedNS.equals(actualNS))) { throw new Exception("Element namespaces names do not match: " + expectedNS + " " + actualNS); } String elementName = "{" + expectedElement.getNamespaceURI() + "}" + actualElement.getLocalName(); // compare attributes NamedNodeMap expectedAttrs = expectedElement.getAttributes(); NamedNodeMap actualAttrs = actualElement.getAttributes(); if (countNonNamespaceAttribures(expectedAttrs) != countNonNamespaceAttribures(actualAttrs)) { throw new Exception(elementName + ": Number of attributes do not match up: " + countNonNamespaceAttribures(expectedAttrs) + " " + countNonNamespaceAttribures(actualAttrs)); } for (int i = 0; i < expectedAttrs.getLength(); i++) { Attr expectedAttr = (Attr) expectedAttrs.item(i); if (expectedAttr.getName().startsWith("xmlns")) { continue; } Attr actualAttr = null; if (expectedAttr.getNamespaceURI() == null) { actualAttr = (Attr) actualAttrs.getNamedItem(expectedAttr.getName()); } else { actualAttr = (Attr) actualAttrs.getNamedItemNS(expectedAttr.getNamespaceURI(), expectedAttr.getLocalName()); } if (actualAttr == null) { throw new Exception(elementName + ": No attribute found:" + expectedAttr); } if (!expectedAttr.getValue().equals(actualAttr.getValue())) { throw new Exception(elementName + ": Attribute values do not match: " + expectedAttr.getValue() + " " + actualAttr.getValue()); } } // compare children NodeList expectedChildren = expectedElement.getChildNodes(); NodeList actualChildren = actualElement.getChildNodes(); if (expectedChildren.getLength() != actualChildren.getLength()) { throw new Exception(elementName + ": Number of children do not match up: " + expectedChildren.getLength() + " " + actualChildren.getLength()); } for (int i = 0; i < expectedChildren.getLength(); i++) { Node expectedChild = expectedChildren.item(i); Node actualChild = actualChildren.item(i); compareNodes(expectedChild, actualChild); } } else if (expected instanceof Text) { String expectedData = ((Text) expected).getData().trim(); String actualData = ((Text) actual).getData().trim(); if (!expectedData.equals(actualData)) { throw new Exception("Text does not match: " + expectedData + " " + actualData); } } } private static int countNonNamespaceAttribures(NamedNodeMap attrs) { int n = 0; for (int i = 0; i < attrs.getLength(); i++) { Attr attr = (Attr) attrs.item(i); if (!attr.getName().startsWith("xmlns")) { n++; } } return n; }
}
</source>
Compare two DOM Nodes from JBoss
<source lang="java">
/**
* JBoss, Home of Professional Open Source * * Distributable under LGPL license. * See terms of license at gnu.org. */
import java.util.ArrayList; import java.util.List; import org.w3c.dom.NamedNodeMap; import org.w3c.dom.Node; import org.w3c.dom.NodeList; /**
* @author * @version $Revision: 3282 $ $Id: XMLUtil.java 3282 2007-11-01 * 15:32:29Z timfox $ */
public class Utils {
public static void assertEquivalent(Node node, Node node2) { if (node == null) { throw new IllegalArgumentException("the first node to be compared is null"); } if (node2 == null) { throw new IllegalArgumentException("the second node to be compared is null"); } if (!node.getNodeName().equals(node2.getNodeName())) { throw new IllegalArgumentException("nodes have different node names"); } int attrCount = 0; NamedNodeMap attrs = node.getAttributes(); if (attrs != null) { attrCount = attrs.getLength(); } int attrCount2 = 0; NamedNodeMap attrs2 = node2.getAttributes(); if (attrs2 != null) { attrCount2 = attrs2.getLength(); } if (attrCount != attrCount2) { throw new IllegalArgumentException("nodes hava a different number of attributes"); } outer: for (int i = 0; i < attrCount; i++) { Node n = attrs.item(i); String name = n.getNodeName(); String value = n.getNodeValue(); for (int j = 0; j < attrCount; j++) { Node n2 = attrs2.item(j); String name2 = n2.getNodeName(); String value2 = n2.getNodeValue(); if (name.equals(name2) && value.equals(value2)) { continue outer; } } throw new IllegalArgumentException("attribute " + name + "=" + value + " doesn"t match"); } boolean hasChildren = node.hasChildNodes(); if (hasChildren != node2.hasChildNodes()) { throw new IllegalArgumentException("one node has children and the other doesn"t"); } if (hasChildren) { NodeList nl = node.getChildNodes(); NodeList nl2 = node2.getChildNodes(); short[] toFilter = new short[] { Node.TEXT_NODE, Node.ATTRIBUTE_NODE, Node.ruMENT_NODE }; List nodes = filter(nl, toFilter); List nodes2 = filter(nl2, toFilter); int length = nodes.size(); if (length != nodes2.size()) { throw new IllegalArgumentException("nodes hava a different number of children"); } for (int i = 0; i < length; i++) { Node n = (Node) nodes.get(i); Node n2 = (Node) nodes2.get(i); assertEquivalent(n, n2); } } } private static List filter(NodeList nl, short[] typesToFilter) { List nodes = new ArrayList(); outer: for (int i = 0; i < nl.getLength(); i++) { Node n = nl.item(i); short type = n.getNodeType(); for (int j = 0; j < typesToFilter.length; j++) { if (typesToFilter[j] == type) { continue outer; } } nodes.add(n); } return nodes; }
}
</source>
Convert Element To Stream
<source lang="java">
import java.io.OutputStream; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerFactory; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; import org.w3c.dom.Element; public class Main {
public static void ElementToStream(Element element, OutputStream out) { try { DOMSource source = new DOMSource(element); StreamResult result = new StreamResult(out); TransformerFactory transFactory = TransformerFactory.newInstance(); Transformer transformer = transFactory.newTransformer(); transformer.transform(source, result); } catch (Exception ex) { } }
}
</source>
Convert node element To String
<source lang="java">
/**
* JBoss, Home of Professional Open Source * * Distributable under LGPL license. * See terms of license at gnu.org. */
import org.w3c.dom.NamedNodeMap; import org.w3c.dom.Node; import org.w3c.dom.NodeList; /**
* @author * @version $Revision: 3282 $ $Id: XMLUtil.java 3282 2007-11-01 * 15:32:29Z timfox $ */
public class Utils {
public static String elementToString(Node n) { String name = n.getNodeName(); short type = n.getNodeType(); if (Node.CDATA_SECTION_NODE == type) { return "<![CDATA[" + n.getNodeValue() + "]]>"; } if (name.startsWith("#")) { return ""; } StringBuffer sb = new StringBuffer(); sb.append("<").append(name); NamedNodeMap attrs = n.getAttributes(); if (attrs != null) { for (int i = 0; i < attrs.getLength(); i++) { Node attr = attrs.item(i); sb.append(" ").append(attr.getNodeName()).append("=\"").append(attr.getNodeValue()).append( "\""); } } String textContent = null; NodeList children = n.getChildNodes(); if (children.getLength() == 0) { if ((textContent = XMLUtil.getTextContent(n)) != null && !"".equals(textContent)) { sb.append(textContent).append("</").append(name).append(">"); ; } else { sb.append("/>").append("\n"); } } else { sb.append(">").append("\n"); boolean hasValidChildren = false; for (int i = 0; i < children.getLength(); i++) { String childToString = elementToString(children.item(i)); if (!"".equals(childToString)) { sb.append(childToString); hasValidChildren = true; } } if (!hasValidChildren && ((textContent = XMLUtil.getTextContent(n)) != null)) { sb.append(textContent); } sb.append("</").append(name).append(">"); } return sb.toString(); }
}
</source>
Create a new element
<source lang="java">
import org.w3c.dom.Document; import org.w3c.dom.Element; public class Utils {
/** * Create a new element * @param document Document to contain the new element * @param name the element name * @return new Element */ public static Element createElement(Document document, String name) { Element element; return document.createElement(name); }
}
</source>
Create New Container
<source lang="java">
import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.NodeList; /*******************************************************************************
* Copyright (C) 2007 Google Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy of * the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under * the License. ******************************************************************************/
/**
* Various XML utilities. * * @author simonjsmith, ksim * @version 1.1 - ksim - March 6th, 2007 - Added functions regarding streaming * @version 1.2 - ksim - March 10th, 2007 - Added functions regarding DOM * manipulation */
public class Utils {
public static Element createNewContainer(Document document, Element parent, String childElement) { Element child = (Element) document.createElement(childElement); parent.appendChild(child); return child; }
}
</source>
Create New Element And Set
<source lang="java">
import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.NodeList; /*******************************************************************************
* Copyright (C) 2007 Google Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy of * the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under * the License. ******************************************************************************/
/**
* Various XML utilities. * * @author simonjsmith, ksim * @version 1.1 - ksim - March 6th, 2007 - Added functions regarding streaming * @version 1.2 - ksim - March 10th, 2007 - Added functions regarding DOM * manipulation */
public class Utils {
public static Element createNewElementAndSet(Document document, Element parent, String childElement, String childValue) { Element child = (Element) document.createElement(childElement); parent.appendChild(child); child.setNodeValue(childValue); child.appendChild(document.createTextNode(childValue)); return child; }
}
</source>
Create New Element And Set Attribute
<source lang="java">
import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.NodeList; /*******************************************************************************
* Copyright (C) 2007 Google Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy of * the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under * the License. ******************************************************************************/
/**
* Various XML utilities. * * @author simonjsmith, ksim * @version 1.1 - ksim - March 6th, 2007 - Added functions regarding streaming * @version 1.2 - ksim - March 10th, 2007 - Added functions regarding DOM * manipulation */
public class Utils {
public static Element createNewElementAndSetAndAttribute(Document document, Element parent, String childElement, String childValue, String attributeName, String attributeValue) { Element child = createNewElementAndSet(document, parent, childElement, childValue); child.setAttribute(attributeName, attributeValue); return child; } public static Element createNewElementAndSet(Document document, Element parent, String childElement, String childValue) { Element child = (Element) document.createElement(childElement); parent.appendChild(child); child.setNodeValue(childValue); child.appendChild(document.createTextNode(childValue)); return child; }
}
</source>
DOM helper for root element
<source lang="java">
/**
* */
//org.ajax4jsf.builder.xml; import java.io.IOException; import java.io.InputStream; import java.io.StringReader; import java.io.StringWriter; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerFactory; import javax.xml.transform.TransformerFactoryConfigurationError; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; import javax.xml.xpath.XPath; import javax.xml.xpath.XPathConstants; import javax.xml.xpath.XPathExpressionException; import javax.xml.xpath.XPathFactory;
import org.w3c.dom.Document; import org.w3c.dom.DocumentFragment; import org.w3c.dom.DocumentType; import org.w3c.dom.Element; import org.w3c.dom.NodeList; import org.xml.sax.EntityResolver; import org.xml.sax.InputSource; import org.xml.sax.SAXException; /**
* This class must read XML file from input stream and can extract body of root * element for include into target in generation. * * @author shura * */
public class XMLBody {
private Document xmlDocument; private Element rootElement; /** * Load XML document and parse it into DOM. * * @param input * @throws ParsingException */ public void loadXML(InputStream input) throws Exception { try { // Create Document Builder Factory DocumentBuilderFactory docFactory = DocumentBuilderFactory .newInstance(); docFactory.setValidating(false); // Create Document Builder DocumentBuilder docBuilder = docFactory.newDocumentBuilder(); docBuilder.isValidating(); // Disable loading of external Entityes docBuilder.setEntityResolver(new EntityResolver() { // Dummi resolver - alvays do nothing public InputSource resolveEntity(String publicId, String systemId) throws SAXException, IOException { return new InputSource(new StringReader("")); } }); // open and parse XML-file xmlDocument = docBuilder.parse(input); // Get Root xmlElement rootElement = xmlDocument.getDocumentElement(); } catch (Exception e) { throw new Exception("Error load XML ", e); } } /** * Check name of root element is as expected. * * @param name * @return */ public boolean isRootName(String name) { return rootElement.getNodeName().equals(name); } public String getDoctype() { DocumentType doctype = xmlDocument.getDoctype(); if (null != doctype) { return doctype.getName(); } return null; } public String getPiblicId() { DocumentType doctype = xmlDocument.getDoctype(); if (null != doctype) { return doctype.getPublicId(); } return null; } public String getRootTypeName() { return rootElement.getSchemaTypeInfo().getTypeName(); } public String getContent() throws Exception { NodeList childNodes = rootElement.getChildNodes(); return serializeNodes(childNodes); } private String serializeNodes(NodeList childNodes) throws Exception { DocumentFragment fragment = xmlDocument.createDocumentFragment(); for (int i = 0; i < childNodes.getLength(); i++) { fragment.appendChild(childNodes.item(i).cloneNode(true)); } try { TransformerFactory transformerFactory = TransformerFactory .newInstance(); Transformer transformer = transformerFactory.newTransformer(); transformer.setOutputProperty("omit-xml-declaration", "yes"); StringWriter out = new StringWriter(); StreamResult result = new StreamResult(out); transformer.transform(new DOMSource(fragment), result); return out.toString(); } catch (Exception e) { throw new Exception(e); } } public String getContent(String xpath) throws Exception{ XPath path = XPathFactory.newInstance().newXPath(); NodeList childNodes; try { childNodes = (NodeList) path.evaluate(xpath, xmlDocument,XPathConstants.NODESET); } catch (XPathExpressionException e) { throw new Exception("Error evaluate xpath",e); } return serializeNodes(childNodes); }
}
</source>
DOM Util: get Element Text
<source lang="java">
import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; public class Main {
public static String getChildText(Element parent, String childName) { NodeList list = parent.getElementsByTagName(childName); if (list.getLength() > 1) { throw new IllegalStateException("Multiple child elements with name " + childName); } else if (list.getLength() == 0) { return null; } Element child = (Element) list.item(0); return getText(child); } public static String getText(Element element) { StringBuffer buf = new StringBuffer(); NodeList list = element.getChildNodes(); boolean found = false; for (int i = 0; i < list.getLength(); i++) { Node node = list.item(i); if (node.getNodeType() == Node.TEXT_NODE) { buf.append(node.getNodeValue()); found = true; } } return found ? buf.toString() : null; }
}
</source>
Find All Elements By Tag Name
<source lang="java">
/**
* Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */
import java.util.LinkedList; import java.util.List; import javax.xml.namespace.QName; import org.w3c.dom.Element; import org.w3c.dom.Node; /**
* Few simple utils to read DOM. This is originally from the Jakarta Commons * Modeler. * * @author Costin Manolache */
public class Utils {
public static List<Element> findAllElementsByTagName(Element elem, String tagName) { List<Element> ret = new LinkedList<Element>(); findAllElementsByTagName(elem, tagName, ret); return ret;
}
private static void findAllElementsByTagName(Element el, String tagName, List<Element> elementList) { if (tagName.equals(el.getTagName())) { elementList.add(el); } Element elem = getFirstElement(el); while (elem != null) { findAllElementsByTagName(elem, tagName, elementList); elem = getNextElement(elem); } } private static void findAllElementsByTagNameNS(Element el, String nameSpaceURI, String localName, List<Element> elementList) { if (localName.equals(el.getLocalName()) && nameSpaceURI.contains(el.getNamespaceURI())) { elementList.add(el); } Element elem = getFirstElement(el); while (elem != null) { findAllElementsByTagNameNS(elem, nameSpaceURI, localName, elementList); elem = getNextElement(elem); } } public static Element getFirstElement(Node parent) { Node n = parent.getFirstChild(); while (n != null && Node.ELEMENT_NODE != n.getNodeType()) { n = n.getNextSibling(); } if (n == null) { return null; } return (Element) n; } public static Element getNextElement(Element el) { Node nd = el.getNextSibling(); while (nd != null) { if (nd.getNodeType() == Node.ELEMENT_NODE) { return (Element) nd; } nd = nd.getNextSibling(); } return null; }
}
</source>
Find All Elements By Tag Name Name Space
<source lang="java">
/**
* Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */
import java.util.LinkedList; import java.util.List; import javax.xml.namespace.QName; import org.w3c.dom.Element; import org.w3c.dom.Node; /**
* Few simple utils to read DOM. This is originally from the Jakarta Commons * Modeler. * * @author Costin Manolache */
public class Utils {
public static List<Element> findAllElementsByTagNameNS(Element elem, String nameSpaceURI, String localName) { List<Element> ret = new LinkedList<Element>(); findAllElementsByTagNameNS(elem, nameSpaceURI, localName, ret); return ret; } private static void findAllElementsByTagName(Element el, String tagName, List<Element> elementList) { if (tagName.equals(el.getTagName())) { elementList.add(el); } Element elem = getFirstElement(el); while (elem != null) { findAllElementsByTagName(elem, tagName, elementList); elem = getNextElement(elem); } } private static void findAllElementsByTagNameNS(Element el, String nameSpaceURI, String localName, List<Element> elementList) { if (localName.equals(el.getLocalName()) && nameSpaceURI.contains(el.getNamespaceURI())) { elementList.add(el); } Element elem = getFirstElement(el); while (elem != null) { findAllElementsByTagNameNS(elem, nameSpaceURI, localName, elementList); elem = getNextElement(elem); } } public static Element getFirstElement(Node parent) { Node n = parent.getFirstChild(); while (n != null && Node.ELEMENT_NODE != n.getNodeType()) { n = n.getNextSibling(); } if (n == null) { return null; } return (Element) n; } public static Element getNextElement(Element el) { Node nd = el.getNextSibling(); while (nd != null) { if (nd.getNodeType() == Node.ELEMENT_NODE) { return (Element) nd; } nd = nd.getNextSibling(); } return null; }
}
</source>
Find Container Else Create One
<source lang="java">
import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.NodeList; /*******************************************************************************
* Copyright (C) 2007 Google Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy of * the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under * the License. ******************************************************************************/
/**
* Various XML utilities. * * @author simonjsmith, ksim * @version 1.1 - ksim - March 6th, 2007 - Added functions regarding streaming * @version 1.2 - ksim - March 10th, 2007 - Added functions regarding DOM * manipulation */
public class Utils {
public static Element findContainerElseCreate(Document document, Element parent, String child) { NodeList nl = parent.getElementsByTagName(child); if (nl.getLength() == 0) { parent.appendChild(document.createElement(child)); } return (Element) parent.getElementsByTagName(child).item(0); }
}
</source>
Find Element And Set Or Create And Set
<source lang="java">
import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.NodeList; /*******************************************************************************
* Copyright (C) 2007 Google Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy of * the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under * the License. ******************************************************************************/
/**
* Various XML utilities. * * @author simonjsmith, ksim * @version 1.1 - ksim - March 6th, 2007 - Added functions regarding streaming * @version 1.2 - ksim - March 10th, 2007 - Added functions regarding DOM * manipulation */
public class Utils {
public static Element findElementAndSetElseCreateAndSet(Document document, Element parent, String child, boolean value) { return findElementAndSetElseCreateAndSet(document, parent, child, "" + value); } public static Element findElementAndSetElseCreateAndSet(Document document, Element parent, String child, float value) { return findElementAndSetElseCreateAndSet(document, parent, child, "" + value); } public static Element findElementAndSetElseCreateAndSet(Document document, Element parent, String element, Date date) { return findElementAndSetElseCreateAndSet(document, parent, element, getDateString(date)); } public static Element findElementAndSetElseCreateAndSet(Document document, Element parent, String child, String value) { NodeList nl = parent.getElementsByTagName(child); if (nl.getLength() == 0) { parent.appendChild(document.createElement(child)); } Element ret = (Element) parent.getElementsByTagName(child).item(0); if (ret.getFirstChild() != null) { ret.removeChild(ret.getFirstChild()); } ret.appendChild(document.createTextNode(value)); return ret; }
}
</source>
Find Element Or Container
<source lang="java">
import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.NodeList; /*******************************************************************************
* Copyright (C) 2007 Google Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy of * the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under * the License. ******************************************************************************/
/**
* Various XML utilities. * * @author simonjsmith, ksim * @version 1.1 - ksim - March 6th, 2007 - Added functions regarding streaming * @version 1.2 - ksim - March 10th, 2007 - Added functions regarding DOM * manipulation */
public class Utils {
public static Element findElementOrContainer(Document document, Element parent, String element) { NodeList nl = parent.getElementsByTagName(element); if (nl.getLength() == 0) { return null; } return (Element) nl.item(0); }
}
</source>
Find Element Or Create And Attribute
<source lang="java">
import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.Iterator; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; /*******************************************************************************
* Copyright (C) 2007 Google Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy of * the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under * the License. ******************************************************************************/
/**
* Various XML utilities. * * @author simonjsmith, ksim * @version 1.1 - ksim - March 6th, 2007 - Added functions regarding streaming * @version 1.2 - ksim - March 10th, 2007 - Added functions regarding DOM * manipulation */
public class Utils {
public static Element findElementElseCreateAndAttribute(Document document, Element parent, String element, String attributeName, String attributeValue) { NodeList nl = parent.getElementsByTagName(element); Element e = null; if (nl.getLength() == 0) { parent.appendChild(document.createElement(element)); e = (Element) parent.getElementsByTagName(element).item(0); e.setAttribute(attributeName, attributeValue); } return e; }
}
</source>
Find Element Or Create And Set
<source lang="java">
import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.NodeList; /*******************************************************************************
* Copyright (C) 2007 Google Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy of * the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under * the License. ******************************************************************************/
/**
* Various XML utilities. * * @author simonjsmith, ksim * @version 1.1 - ksim - March 6th, 2007 - Added functions regarding streaming * @version 1.2 - ksim - March 10th, 2007 - Added functions regarding DOM * manipulation */
public class Utils {
public static Element findElementElseCreateAndSet(Document document, Element parent, String child, String value) { Element ret = null; NodeList nl = parent.getElementsByTagName(child); if (nl.getLength() == 0) { parent.appendChild(document.createElement(child)); ret = (Element) parent.getElementsByTagName(child).item(0); ret.appendChild(document.createTextNode(value)); } return ret; }
}
</source>
Find Element Or Create And Set Attribute
<source lang="java">
import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.Iterator; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; /*******************************************************************************
* Copyright (C) 2007 Google Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy of * the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under * the License. ******************************************************************************/
/**
* Various XML utilities. * * @author simonjsmith, ksim * @version 1.1 - ksim - March 6th, 2007 - Added functions regarding streaming * @version 1.2 - ksim - March 10th, 2007 - Added functions regarding DOM * manipulation */
public class Utils {
public static Element findElementElseCreateAndSetAndAttribute( Document document, Element parent, String element, String value, String attributeName, String attributeValue) { Element e = findElementElseCreateAndAttribute(document, parent, element, attributeName, attributeValue); if (e != null) e.appendChild(document.createTextNode(value)); return e; } public static Element findElementElseCreateAndAttribute(Document document, Element parent, String element, String attributeName, String attributeValue) { NodeList nl = parent.getElementsByTagName(element); Element e = null; if (nl.getLength() == 0) { parent.appendChild(document.createElement(element)); e = (Element) parent.getElementsByTagName(element).item(0); e.setAttribute(attributeName, attributeValue); } return e; }
}
</source>
Get child from an element by name
<source lang="java">
import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; public class Main {
public static String getChildContent(Element parent, String name, String missing, String empty) { Element child = getChild(parent, name); if (child == null) { return missing; } else { String content = (String) getContent(child); return (content != null) ? content : empty; } } public static Object getContent(Element element) { NodeList nl = element.getChildNodes(); StringBuffer content = new StringBuffer(); for (int i = 0; i < nl.getLength(); i++) { Node node = nl.item(i); switch (node.getNodeType()) { case Node.ELEMENT_NODE: return node; case Node.CDATA_SECTION_NODE: case Node.TEXT_NODE: content.append(node.getNodeValue()); break; } } return content.toString().trim(); } public static Element getChild(Element parent, String name) { for (Node child = parent.getFirstChild(); child != null; child = child.getNextSibling()) { if (child instanceof Element && name.equals(child.getNodeName())) { return (Element) child; } } return null; }
}
</source>
Get content from element
<source lang="java">
import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; public class Main {
public static String getChildContent(Element parent, String name, String missing, String empty) { Element child = getChild(parent, name); if (child == null) { return missing; } else { String content = (String) getContent(child); return (content != null) ? content : empty; } } public static Object getContent(Element element) { NodeList nl = element.getChildNodes(); StringBuffer content = new StringBuffer(); for (int i = 0; i < nl.getLength(); i++) { Node node = nl.item(i); switch (node.getNodeType()) { case Node.ELEMENT_NODE: return node; case Node.CDATA_SECTION_NODE: case Node.TEXT_NODE: content.append(node.getNodeValue()); break; } } return content.toString().trim(); } public static Element getChild(Element parent, String name) { for (Node child = parent.getFirstChild(); child != null; child = child.getNextSibling()) { if (child instanceof Element && name.equals(child.getNodeName())) { return (Element) child; } } return null; }
}
</source>
Get Element Boolean Value
<source lang="java">
import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; /*******************************************************************************
* Copyright (C) 2007 Google Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy of * the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under * the License. ******************************************************************************/
/**
* Various XML utilities. * * @author simonjsmith, ksim * @version 1.1 - ksim - March 6th, 2007 - Added functions regarding streaming * @version 1.2 - ksim - March 10th, 2007 - Added functions regarding DOM * manipulation */
public class Utils {
public static boolean getElementBooleanValue(Document document, Element parent, String element) { return Boolean .valueOf(getElementStringValue(document, parent, element)) .booleanValue(); } public static String getElementStringValue(Document document, Element parent, String element) { NodeList nl = parent.getElementsByTagName(element); if (nl.getLength() == 0) { return ""; } Node n = nl.item(0).getFirstChild(); if (n == null) { return ""; } return n.getNodeValue(); }
}
</source>
Get Element Date Value
<source lang="java">
import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; /*******************************************************************************
* Copyright (C) 2007 Google Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy of * the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under * the License. ******************************************************************************/
/**
* Various XML utilities. * * @author simonjsmith, ksim * @version 1.1 - ksim - March 6th, 2007 - Added functions regarding streaming * @version 1.2 - ksim - March 10th, 2007 - Added functions regarding DOM * manipulation */
public class Utils {
public static Date getElementDateValue(Document document, Element parent, String string) { return parseDate(getElementStringValue(document, parent, string)); } private static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"T"HH:mm:ss"); public static Date parseDate(String date) { try { return sdf.parse(date); } catch (ParseException e) { e.printStackTrace(); } return null; } public static String getElementStringValue(Document document, Element parent, String element) { NodeList nl = parent.getElementsByTagName(element); if (nl.getLength() == 0) { return ""; } Node n = nl.item(0).getFirstChild(); if (n == null) { return ""; } return n.getNodeValue(); }
}
</source>
Get Element Float Value
<source lang="java">
import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; /*******************************************************************************
* Copyright (C) 2007 Google Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy of * the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under * the License. ******************************************************************************/
/**
* Various XML utilities. * * @author simonjsmith, ksim * @version 1.1 - ksim - March 6th, 2007 - Added functions regarding streaming * @version 1.2 - ksim - March 10th, 2007 - Added functions regarding DOM * manipulation */
public class Utils {
public static float getElementFloatValue(Document document, Element parent, String element) { return Float .parseFloat(getElementStringValue(document, parent, element)); } public static String getElementStringValue(Document document, Element parent, String element) { NodeList nl = parent.getElementsByTagName(element); if (nl.getLength() == 0) { return ""; } Node n = nl.item(0).getFirstChild(); if (n == null) { return ""; } return n.getNodeValue(); }
}
</source>
Get Element Int Value
<source lang="java">
import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; /*******************************************************************************
* Copyright (C) 2007 Google Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy of * the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under * the License. ******************************************************************************/
/**
* Various XML utilities. * * @author simonjsmith, ksim * @version 1.1 - ksim - March 6th, 2007 - Added functions regarding streaming * @version 1.2 - ksim - March 10th, 2007 - Added functions regarding DOM * manipulation */
public class Utils {
public static int getElementIntValue(Document document, Element parent, String string) { return Integer .parseInt(getElementStringValue(document, parent, string)); } public static String getElementStringValue(Document document, Element parent, String element) { NodeList nl = parent.getElementsByTagName(element); if (nl.getLength() == 0) { return ""; } Node n = nl.item(0).getFirstChild(); if (n == null) { return ""; } return n.getNodeValue(); }
}
</source>
Get Element Long Value
<source lang="java">
import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; /*******************************************************************************
* Copyright (C) 2007 Google Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy of * the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under * the License. ******************************************************************************/
/**
* Various XML utilities. * * @author simonjsmith, ksim * @version 1.1 - ksim - March 6th, 2007 - Added functions regarding streaming * @version 1.2 - ksim - March 10th, 2007 - Added functions regarding DOM * manipulation */
public class Utils {
public static long getElementLongValue(Document document, Element parent, String string) { return Long.parseLong(getElementStringValue(document, parent, string)); } public static String getElementStringValue(Document document, Element parent, String element) { NodeList nl = parent.getElementsByTagName(element); if (nl.getLength() == 0) { return ""; } Node n = nl.item(0).getFirstChild(); if (n == null) { return ""; } return n.getNodeValue(); }
}
</source>
Get Element QName
<source lang="java">
/**
* Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */
import javax.xml.namespace.QName; import org.w3c.dom.Element; /**
* Few simple utils to read DOM. This is originally from the Jakarta Commons * Modeler. * * @author Costin Manolache */
public class Utils {
public static QName getElementQName(Element el) { return new QName(el.getNamespaceURI(), el.getLocalName());
} }
</source>
Get Elements by parent element
<source lang="java">
import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.Iterator; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; /*******************************************************************************
* Copyright (C) 2007 Google Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy of * the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under * the License. ******************************************************************************/
/**
* Various XML utilities. * * @author simonjsmith, ksim * @version 1.1 - ksim - March 6th, 2007 - Added functions regarding streaming * @version 1.2 - ksim - March 10th, 2007 - Added functions regarding DOM * manipulation */
public class Utils {
public static Element[] getElements(Document document, Element parent) { if (parent == null) { return new Element[] {}; } NodeList nl = parent.getChildNodes(); ArrayList al = new ArrayList(); for (int i = 0; i < nl.getLength(); i++) { Node n = nl.item(i); if (n instanceof Element) { al.add((Element) nl.item(i)); } } Element[] ret = new Element[al.size()]; Iterator it = al.iterator(); int i = 0; while (it.hasNext()) { ret[i] = (Element) it.next(); i++; } return ret; }
}
</source>
Get Element String Value
<source lang="java">
import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; /*******************************************************************************
* Copyright (C) 2007 Google Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy of * the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under * the License. ******************************************************************************/
/**
* Various XML utilities. * * @author simonjsmith, ksim * @version 1.1 - ksim - March 6th, 2007 - Added functions regarding streaming * @version 1.2 - ksim - March 10th, 2007 - Added functions regarding DOM * manipulation */
public class Utils {
public static String getElementStringValue(Document document, Element parent, String element) { NodeList nl = parent.getElementsByTagName(element); if (nl.getLength() == 0) { return ""; } Node n = nl.item(0).getFirstChild(); if (n == null) { return ""; } return n.getNodeValue(); }
}
</source>
Get Element Text
<source lang="java">
import org.w3c.dom.Element; import org.w3c.dom.Node; public class Utils {
public static String getElementText(Element e) { StringBuffer buf = new StringBuffer(); for (Node n = e.getFirstChild(); n != null; n = n.getNextSibling()) { if (n.getNodeType() == Node.TEXT_NODE || n.getNodeType() == Node.CDATA_SECTION_NODE) { buf.append(n.getNodeValue()); } } return buf.toString(); }
}
</source>
Get First Element
<source lang="java">
/**
* Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */
import javax.xml.namespace.QName; import org.w3c.dom.Element; import org.w3c.dom.Node; /**
* Few simple utils to read DOM. This is originally from the Jakarta Commons * Modeler. * * @author Costin Manolache */
public class Utils {
public static Element getFirstElement(Node parent) { Node n = parent.getFirstChild(); while (n != null && Node.ELEMENT_NODE != n.getNodeType()) { n = n.getNextSibling(); } if (n == null) { return null; } return (Element)n;
}
public static Element getNextElement(Element el) { Node nd = el.getNextSibling(); while (nd != null) { if (nd.getNodeType() == Node.ELEMENT_NODE) { return (Element)nd; } nd = nd.getNextSibling(); } return null;
} }
</source>
Get Next Element
<source lang="java">
/**
* Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */
import javax.xml.namespace.QName; import org.w3c.dom.Element; import org.w3c.dom.Node; /**
* Few simple utils to read DOM. This is originally from the Jakarta Commons * Modeler. * * @author Costin Manolache */
public class Utils {
public static Element getNextElement(Element el) { Node nd = el.getNextSibling(); while (nd != null) { if (nd.getNodeType() == Node.ELEMENT_NODE) { return (Element)nd; } nd = nd.getNextSibling(); } return null;
} }
</source>
Get the content of an optional child element
<source lang="java">
import java.util.ArrayList; import java.util.Iterator; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; /**
* A utility class to cover up the rough bits of xml parsing * * @author * @version $Revision: 70500 $ */
public class XmlHelper {
/** * Macro to get the content of an optional child element. * * @param element * The parent element. * @param tagName * The name of the desired child. * @return The element content or null. */ public static String getOptionalChildContent(Element element, String tagName) throws Exception { return getElementContent(getOptionalChild(element, tagName)); } public static boolean getOptionalChildBooleanContent(Element element, String name) throws Exception { Element child = getOptionalChild(element, name); if (child != null) { String value = getElementContent(child).toLowerCase(); return value.equals("true") || value.equals("yes"); } return false; } /** * Returns an iterator over the children of the given element with the given * tag name. * * @param element * The parent element * @param tagName * The name of the desired child * @return An interator of children or null if element is null. */ public static Iterator<Element> getChildrenByTagName(Element element, String tagName) { if (element == null) return null; // getElementsByTagName gives the corresponding elements in the whole // descendance. We want only children NodeList children = element.getChildNodes(); ArrayList<Element> goodChildren = new ArrayList<Element>(); for (int i = 0; i < children.getLength(); i++) { Node currentChild = children.item(i); if (currentChild.getNodeType() == Node.ELEMENT_NODE && ((Element) currentChild).getTagName().equals(tagName)) { goodChildren.add((Element) currentChild); } } return goodChildren.iterator(); } /** * Gets the child of the specified element having the specified unique name. * If there are more than one children elements with the same name and * exception is thrown. * * @param element * The parent element * @param tagName * The name of the desired child * @return The named child. * * @throws Exception * Child was not found or was not unique. */ public static Element getUniqueChild(Element element, String tagName) throws Exception { Iterator<Element> goodChildren = getChildrenByTagName(element, tagName); if (goodChildren != null && goodChildren.hasNext()) { Element child = goodChildren.next(); if (goodChildren.hasNext()) { throw new Exception("expected only one " + tagName + " tag"); } return child; } else { throw new Exception("expected one " + tagName + " tag"); } } /** * Gets the child of the specified element having the specified name. If the * child with this name doesn"t exist then null is returned instead. * * @param element * the parent element * @param tagName * the name of the desired child * @return either the named child or null */ public static Element getOptionalChild(Element element, String tagName) throws Exception { return getOptionalChild(element, tagName, null); } /** * Gets the child of the specified element having the specified name. If the * child with this name doesn"t exist then the supplied default element is * returned instead. * * @param element * the parent element * @param tagName * the name of the desired child * @param defaultElement * the element to return if the child doesn"t exist * @return either the named child or the supplied default */ public static Element getOptionalChild(Element element, String tagName, Element defaultElement) throws Exception { Iterator<Element> goodChildren = getChildrenByTagName(element, tagName); if (goodChildren != null && goodChildren.hasNext()) { Element child = goodChildren.next(); if (goodChildren.hasNext()) { throw new Exception("expected only one " + tagName + " tag"); } return child; } else { return defaultElement; } } /** * Get the content of the given element. * * @param element * The element to get the content for. * @return The content of the element or null. */ public static String getElementContent(final Element element) throws Exception { return getElementContent(element, null); } /** * Get the content of the given element. * * @param element * The element to get the content for. * @param defaultStr * The default to return when there is no content. * @return The content of the element or the default. */ public static String getElementContent(Element element, String defaultStr) throws Exception { if (element == null) return defaultStr; NodeList children = element.getChildNodes(); String result = ""; for (int i = 0; i < children.getLength(); i++) { if (children.item(i).getNodeType() == Node.TEXT_NODE || children.item(i).getNodeType() == Node.CDATA_SECTION_NODE) { result += children.item(i).getNodeValue(); } else if (children.item(i).getNodeType() == Node.ruMENT_NODE) { // Ignore comment nodes } } return result.trim(); } /** * Macro to get the content of a unique child element. * * @param element * The parent element. * @param tagName * The name of the desired child. * @return The element content or null. */ public static String getUniqueChildContent(Element element, String tagName) throws Exception { return getElementContent(getUniqueChild(element, tagName)); }
}
</source>
Get the content of the given element.
<source lang="java">
import java.util.ArrayList; import java.util.Iterator; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; /*
* JBoss, Home of Professional Open Source * Copyright 2005, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */
public class Utils {
/** * Get the content of the given element. * * @param element The element to get the content for. * @param defaultStr The default to return when there is no content. * @return The content of the element or the default. */ public static String getElementContent(Element element, String defaultStr) throws Exception { if (element == null) return defaultStr; NodeList children = element.getChildNodes(); String result = ""; for (int i = 0; i < children.getLength(); i++) { if (children.item(i).getNodeType() == Node.TEXT_NODE || children.item(i).getNodeType() == Node.CDATA_SECTION_NODE) { result += children.item(i).getNodeValue(); } else if( children.item(i).getNodeType() == Node.ruMENT_NODE ) { // Ignore comment nodes } } return result.trim(); } /** * Gets the child of the specified element having the specified unique * name. If there are more than one children elements with the same name * and exception is thrown. * * @param element The parent element * @param tagName The name of the desired child * @return The named child. * * @throws Exception Child was not found or was not unique. */ public static Element getUniqueChild(Element element, String tagName) throws Exception { Iterator<Element> goodChildren = getChildrenByTagName(element, tagName); if (goodChildren != null && goodChildren.hasNext()) { Element child = goodChildren.next(); if (goodChildren.hasNext()) { throw new Exception ("expected only one " + tagName + " tag"); } return child; } else { throw new Exception ("expected one " + tagName + " tag"); } } /** * Returns an iterator over the children of the given element with * the given tag name. * * @param element The parent element * @param tagName The name of the desired child * @return An interator of children or null if element is null. */ public static Iterator<Element> getChildrenByTagName(Element element, String tagName) { if (element == null) return null; // getElementsByTagName gives the corresponding elements in the whole // descendance. We want only children NodeList children = element.getChildNodes(); ArrayList<Element> goodChildren = new ArrayList<Element>(); for (int i=0; i<children.getLength(); i++) { Node currentChild = children.item(i); if (currentChild.getNodeType() == Node.ELEMENT_NODE && ((Element)currentChild).getTagName().equals(tagName)) { goodChildren.add((Element)currentChild); } } return goodChildren.iterator(); }
}
</source>
Get the first child element
<source lang="java">
import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; public class Utils {
/** * Get the first child element * @param parent * @return */ public static Element getFirstChildElement(Node parent) { NodeList childs = parent.getChildNodes(); for (int i = 0; i < childs.getLength(); i++) { Node child = childs.item(i); if (child instanceof Element) { return (Element) child; } } return null; }
}
</source>
Get the first element child.
<source lang="java">
/**
* Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */
import java.io.OutputStream; import javax.xml.transform.OutputKeys; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerException; import javax.xml.transform.TransformerFactory; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; import org.w3c.dom.Node; /**
* Few simple utils to read DOM. This is originally from the Jakarta Commons * Modeler. * * @author Costin Manolache */
public class Utils {
/** * Get the first element child. * * @param parent lookup direct childs * @param name name of the element. If null return the first element. */ public static Node getChild(Node parent, String name) { if (parent == null) { return null; } Node first = parent.getFirstChild(); if (first == null) { return null; } for (Node node = first; node != null; node = node.getNextSibling()) { // System.out.println("getNode: " + name + " " + // node.getNodeName()); if (node.getNodeType() != Node.ELEMENT_NODE) { continue; } if (name != null && name.equals(node.getNodeName())) { return node; } if (name == null) { return node; } } return null; }
}
</source>
Get the first text node associated with this element
<source lang="java">
import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; public class Utils {
public static String getFirstText(Node parent) { return getTextNodeByNumber(parent, 1); } public static String getTextNodeByNumber(Node parent, int number) { String text = null; int count = 1; if (parent != null) { for (Node child = parent.getFirstChild(); child != null; child = child.getNextSibling()) { if ((child.getNodeType() == Node.TEXT_NODE) && (count++ == number)) { text = child.getNodeValue(); return text.trim(); } } } return text; }
}
</source>
Get the next sibling element
<source lang="java">
import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; public class Utils {
/** * Get the next sibling element * @param el * @return */ public static Element getNextSiblingElement(Element el) { for (Node n = el.getNextSibling(); n != null; n = n.getNextSibling()) { if (n instanceof Element) { return (Element) n; } } return null; }
}
</source>
Get the next sibling with the same name and type
<source lang="java">
import org.w3c.dom.Node; public class Utils {
/** * Get the next sibling with the same name and type */ public static Node getNext(Node current) { String name = current.getNodeName(); int type = current.getNodeType(); return getNext(current, name, type); } /** * Return the next sibling with a given name and type */ public static Node getNext(Node current, String name, int type) { Node first = current.getNextSibling(); if (first == null) { return null; } for (Node node = first; node != null; node = node.getNextSibling()) { if (type >= 0 && node.getNodeType() != type) { continue; } if (name == null) { return node; } if (name.equals(node.getNodeName())) { return node; } } return null; } /** * Get the first child of the specified type. * * @param parent * @param type * @return */ public static Node getChild(Node parent, int type) { Node n = parent.getFirstChild(); while (n != null && type != n.getNodeType()) { n = n.getNextSibling(); } if (n == null) { return null; } return n; }
}
</source>
Get the raw text content of a node or null if there is no text
<source lang="java">
import org.w3c.dom.Node; public class Utils {
/** * Get the raw text content of a node or null if there is no text */ public static String getRawContent(Node n) { if (n == null) { return null; } Node n1 = getChild(n, Node.TEXT_NODE); if (n1 == null) { return null; } return n1.getNodeValue(); } /** * Get the first child of the specified type. * * @param parent * @param type * @return */ public static Node getChild(Node parent, int type) { Node n = parent.getFirstChild(); while (n != null && type != n.getNodeType()) { n = n.getNextSibling(); } if (n == null) { return null; } return n; }
}
</source>
Get the specified text node associated with this element
<source lang="java">
import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; public class Utils {
/** * Get the first text node associated with this element * @param parent the node containing text * @return Text (trimmed of leanding/trailing whitespace, null if none) */ public static String getFirstText(Node parent) { return getTextNodeByNumber(parent, 1); } /** * Get the specified text node associated with this element * @param parent the node containing text * @param number The text node to fetch (1st, 2nd, etc) * @return Text (trimmed of leanding/trailing whitespace, null if none) */ public static String getTextNodeByNumber(Node parent, int number) { String text = null; int count = 1; if (parent != null) { for (Node child = parent.getFirstChild(); child != null; child = child.getNextSibling()) { if ((child.getNodeType() == Node.TEXT_NODE) && (count++ == number)) { text = child.getNodeValue(); return text.trim(); } } } return text; }
}
</source>
Get the trimed text content of a node or null if there is no text
<source lang="java">
import org.w3c.dom.Node; /**
* * * @author Costin Manolache */
public class Main {
/** Get the trimed text content of a node or null if there is no text */ public static String getContent(Node n ) { if( n==null ) return null; Node n1=getChild(n, Node.TEXT_NODE); if( n1==null ) return null; String s1=n1.getNodeValue(); return s1.trim(); } /** Get the first direct child with a given type */ public static Node getChild( Node parent, int type ) { Node n=parent.getFirstChild(); while( n!=null && type != n.getNodeType() ) { n=n.getNextSibling(); } if( n==null ) return null; return n; }
}
</source>
Get trimmed text content of a node or null if there is no text
<source lang="java">
import org.w3c.dom.Node; public class Utils {
/** * Get the trimmed text content of a node or null if there is no text */ public static String getContent(Node n) { if (n == null) { return null; } Node n1 = getChild(n, Node.TEXT_NODE); if (n1 == null) { return null; } return n1.getNodeValue().trim(); } /** * Get the raw text content of a node or null if there is no text */ public static String getRawContent(Node n) { if (n == null) { return null; } Node n1 = getChild(n, Node.TEXT_NODE); if (n1 == null) { return null; } return n1.getNodeValue(); } /** * Get the first child of the specified type. * * @param parent * @param type * @return */ public static Node getChild(Node parent, int type) { Node n = parent.getFirstChild(); while (n != null && type != n.getNodeType()) { n = n.getNextSibling(); } if (n == null) { return null; } return n; }
}
</source>
Has Attribute
<source lang="java">
import org.w3c.dom.Element; import org.w3c.dom.NamedNodeMap; import org.w3c.dom.Node; public class Utils {
public static boolean hasAttribute(Element element, String value) { NamedNodeMap attributes = element.getAttributes(); for (int i = 0; i < attributes.getLength(); i++) { Node node = attributes.item(i); if (value.equals(node.getNodeValue())) { return true; } } return false;
} }
</source>
Import Elements
<source lang="java">
import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; /*******************************************************************************
* Copyright (C) 2007 Google Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy of * the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under * the License. ******************************************************************************/
/**
* Various XML utilities. * * @author simonjsmith, ksim * @version 1.1 - ksim - March 6th, 2007 - Added functions regarding streaming * @version 1.2 - ksim - March 10th, 2007 - Added functions regarding DOM * manipulation */
public class Utils {
public static void importElements(Document document, Element parent, Element[] children) { for (int i = 0; i < children.length; i++) { parent.appendChild(document.importNode(children[i], true)); } }
}
</source>
Macro to get the content of a unique child element.
<source lang="java">
import java.util.ArrayList; import java.util.Iterator; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; /*
* JBoss, Home of Professional Open Source * Copyright 2005, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */
public class Utils {
/** * Macro to get the content of a unique child element. * * @param element The parent element. * @param tagName The name of the desired child. * @return The element content or null. */ public static String getUniqueChildContent(Element element, String tagName) throws Exception { return getElementContent(getUniqueChild(element, tagName)); } /** * Get the content of the given element. * * @param element The element to get the content for. * @return The content of the element or null. */ public static String getElementContent(final Element element) throws Exception { return getElementContent(element, null); } /** * Get the content of the given element. * * @param element The element to get the content for. * @param defaultStr The default to return when there is no content. * @return The content of the element or the default. */ public static String getElementContent(Element element, String defaultStr) throws Exception { if (element == null) return defaultStr; NodeList children = element.getChildNodes(); String result = ""; for (int i = 0; i < children.getLength(); i++) { if (children.item(i).getNodeType() == Node.TEXT_NODE || children.item(i).getNodeType() == Node.CDATA_SECTION_NODE) { result += children.item(i).getNodeValue(); } else if( children.item(i).getNodeType() == Node.ruMENT_NODE ) { // Ignore comment nodes } } return result.trim(); } /** * Gets the child of the specified element having the specified unique * name. If there are more than one children elements with the same name * and exception is thrown. * * @param element The parent element * @param tagName The name of the desired child * @return The named child. * * @throws Exception Child was not found or was not unique. */ public static Element getUniqueChild(Element element, String tagName) throws Exception { Iterator<Element> goodChildren = getChildrenByTagName(element, tagName); if (goodChildren != null && goodChildren.hasNext()) { Element child = goodChildren.next(); if (goodChildren.hasNext()) { throw new Exception ("expected only one " + tagName + " tag"); } return child; } else { throw new Exception ("expected one " + tagName + " tag"); } } /** * Returns an iterator over the children of the given element with * the given tag name. * * @param element The parent element * @param tagName The name of the desired child * @return An interator of children or null if element is null. */ public static Iterator<Element> getChildrenByTagName(Element element, String tagName) { if (element == null) return null; // getElementsByTagName gives the corresponding elements in the whole // descendance. We want only children NodeList children = element.getChildNodes(); ArrayList<Element> goodChildren = new ArrayList<Element>(); for (int i=0; i<children.getLength(); i++) { Node currentChild = children.item(i); if (currentChild.getNodeType() == Node.ELEMENT_NODE && ((Element)currentChild).getTagName().equals(tagName)) { goodChildren.add((Element)currentChild); } } return goodChildren.iterator(); }
}
</source>
Moves the content of the given element to the given element
<source lang="java">
import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; public class Utils {
/** * */ public static void moveContent(Element from, Element to) { // lets move the child nodes across NodeList childNodes = from.getChildNodes(); while (childNodes.getLength() > 0) { Node node = childNodes.item(0); from.removeChild(node); to.appendChild(node); } }
}
</source>
Remove Attribute
<source lang="java">
/**
* Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */
import javax.xml.namespace.QName; import org.w3c.dom.Element; import org.w3c.dom.NamedNodeMap; import org.w3c.dom.Node; /**
* Few simple utils to read DOM. This is originally from the Jakarta Commons * Modeler. * * @author Costin Manolache */
public class Utils {
public static void removeAttribute(Node node, String attName) { NamedNodeMap attributes = node.getAttributes(); attributes.removeNamedItem(attName); }
}
</source>
Return a list of named Elements.
<source lang="java">
/**********************************************************************************
- Copyright (c) 2003, 2004 The Regents of the University of Michigan, Trustees of Indiana University,
- Board of Trustees of the Leland Stanford, Jr., University, and The MIT Corporation
- Licensed under the Educational Community License Version 1.0 (the "License");
- By obtaining, using and/or copying this Original Work, you agree that you have read,
- understand, and will comply with the terms and conditions of the Educational Community License.
- You may obtain a copy of the License at:
- http://cvs.sakaiproject.org/licenses/license_1_0.html
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
- INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
- AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
- /
import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; public class Utils {
/** * Return a list of named Elements. * @param element the containing Element * @param name the tag name * @return NodeList of matching elements */ public static NodeList getElementList(Element element, String name) { return element.getElementsByTagName(name); } /** * Return the first named Element found. Null if none. * @param element the containing Element * @param name the tag name * @return matching Element (null if none) */ public static Element getElement(Element element, String name) { NodeList nodeList = getElementList(element, name); return (nodeList.getLength() == 0) ? null : (Element) nodeList.item(0); }
}
</source>
Return a list of named Elements with a specific attribute value.
<source lang="java">
/**********************************************************************************
- Copyright (c) 2003, 2004 The Regents of the University of Michigan, Trustees of Indiana University,
- Board of Trustees of the Leland Stanford, Jr., University, and The MIT Corporation
- Licensed under the Educational Community License Version 1.0 (the "License");
- By obtaining, using and/or copying this Original Work, you agree that you have read,
- understand, and will comply with the terms and conditions of the Educational Community License.
- You may obtain a copy of the License at:
- http://cvs.sakaiproject.org/licenses/license_1_0.html
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
- INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
- AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
- /
import java.util.ArrayList; import java.util.List; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; public class Utils {
/** * Get an Attribute from an Element. Returns an empty String if none found * @param element the containing Element * @param name the attribute name * @return Attribute as a String */ public static String getAttribute(Element element, String name) { return element.getAttribute(name); } /** * Return a list of named Elements with a specific attribute value. * @param element the containing Element * @param name the tag name * @param attribute Attribute name * @param value Attribute value * @param returnFirst Return only the first matching value? * @return List of matching elements */ public static List selectElementsByAttributeValue(Element element, String name, String attribute, String value, boolean returnFirst) { NodeList elementList = element.getElementsByTagName(name); List resultList = new ArrayList(); for (int i = 0; i < elementList.getLength(); i++) { if (getAttribute((Element) elementList.item(i), attribute).equals(value)) { resultList.add(elementList.item(i)); if (returnFirst) { break; } } } return resultList; }
}
</source>
Return child elements with specified name.
<source lang="java">
/**
* Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */
import java.util.ArrayList; import java.util.List; import org.w3c.dom.Element; import org.w3c.dom.Node; /**
* Few simple utils to read DOM. This is originally from the Jakarta Commons * Modeler. * * @author Costin Manolache */
public class Utils {
/** * Return child elements with specified name. * * @param parent * @param ns * @param localName * @return */ public static List<Element> getChildrenWithName(Element parent, String ns, String localName) { List<Element> r = new ArrayList<Element>(); for (Node n = parent.getFirstChild(); n != null; n = n.getNextSibling()) { if (n instanceof Element) { Element e = (Element) n; String eNs = (e.getNamespaceURI() == null) ? "" : e.getNamespaceURI(); if (ns.equals(eNs) && localName.equals(e.getLocalName())) { r.add(e); } } } return r; }
}
</source>
Returns a list of child elements with the given name.
<source lang="java">
import java.util.ArrayList; import java.util.List; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.w3c.dom.Text; public class Utils {
/***
Returns a list of child elements with the given * name. Returns an empty list if there are no such child * elements.
* * @param parent parent element * @param name name of the child element * @return child elements */ public static List getChildElementsByName(Element parent, String name) { List elements = new ArrayList(); NodeList children = parent.getChildNodes(); for(int i = 0; i < children.getLength(); i++) { Node node = children.item(i); if(node.getNodeType() == Node.ELEMENT_NODE) { Element element = (Element) node; if(element.getTagName().equals(name)) { elements.add(element); } } } return elements; }
}
</source>
Returns an array of text values of a child element.
<source lang="java">
import java.util.ArrayList; import java.util.List; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.w3c.dom.Text; public class Utils {
/***
Returns an array of text values of a child element. Returns
* null
if there is no child element found.
* * @param parent parent element * @param name name of the child element * @return text value */ public static String[] getChildElementTextArr(Element parent, String name) { // Get all the elements List children = getChildElementsByName(parent, name); String str[] = new String[children.size()]; for(int i = 0; i < children.size(); i++) { Node child = (Node) children.get(i); StringBuffer buf = new StringBuffer(); NodeList nodes = child.getChildNodes(); for(int j = 0; j < nodes.getLength(); j++) { Node node = nodes.item(j); if(node.getNodeType() == Node.TEXT_NODE || node.getNodeType() == Node.CDATA_SECTION_NODE) { Text text = (Text) node; buf.append(text.getData().trim()); } } str[i] = buf.toString(); } return str; } /***
Returns a list of child elements with the given * name. Returns an empty list if there are no such child * elements.
* * @param parent parent element * @param name name of the child element * @return child elements */ public static List getChildElementsByName(Element parent, String name) { List elements = new ArrayList(); NodeList children = parent.getChildNodes(); for(int i = 0; i < children.getLength(); i++) { Node node = children.item(i); if(node.getNodeType() == Node.ELEMENT_NODE) { Element element = (Element) node; if(element.getTagName().equals(name)) { elements.add(element); } } } return elements; }
}
</source>
Returns text value of a child element. Returns null if there is no child element found.
<source lang="java">
import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.w3c.dom.Text; public class Utils {
public static String getElementText(Element element) { StringBuffer buf = new StringBuffer(); NodeList children = element.getChildNodes(); for(int i = 0; i < children.getLength(); i++) { Node node = children.item(i); if(node.getNodeType() == Node.TEXT_NODE || node.getNodeType() == Node.CDATA_SECTION_NODE) { Text text = (Text) node; buf.append(text.getData().trim()); } } return buf.toString(); }
}
</source>
Returns the first child element with the given name.
<source lang="java">
import org.w3c.dom.Attr; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; public class Utils {
/***
Returns the first child element with the given name. Returns
* null
if not found.
* * @param parent parent element * @param name name of the child element * @return child element */ public static Element getChildElementByName(Element parent, String name) { NodeList children = parent.getChildNodes(); for(int i = 0; i < children.getLength(); i++) { Node node = children.item(i); if(node.getNodeType() == Node.ELEMENT_NODE) { Element element = (Element) node; if(element.getTagName().equals(name)) { return element; } } } return null; }
}
</source>
Returns the first element that has the specified local name.
<source lang="java">
import org.w3c.dom.Element; import org.w3c.dom.Node; public class Utils {
public static Element getFirstChild(Element e, String local) { for( Node n=e.getFirstChild(); n!=null; n=n.getNextSibling() ) { if(n.getNodeType()==Node.ELEMENT_NODE) { Element c = (Element)n; if(c.getLocalName().equals(local)) return c; } } return null;
} }
</source>
Returns the text of the element
<source lang="java">
import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; public class Utils {
/** * */ public static String getElementText(Element element) { StringBuffer buffer = new StringBuffer(); NodeList nodeList = element.getChildNodes(); for (int i = 0; i < nodeList.getLength(); i++) { Node node = nodeList.item(i); if (node.getNodeType() == Node.TEXT_NODE || node.getNodeType() == Node.CDATA_SECTION_NODE) { buffer.append(node.getNodeValue()); } } return buffer.toString(); }
}
</source>
Return the first named Element found. Null if none.
<source lang="java">
import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; public class Utils {
/** * Return a list of named Elements. * @param element the containing Element * @param name the tag name * @return NodeList of matching elements */ public static NodeList getElementList(Element element, String name) { return element.getElementsByTagName(name); } /** * Return the first named Element found. Null if none. * @param element the containing Element * @param name the tag name * @return matching Element (null if none) */ public static Element getElement(Element element, String name) { NodeList nodeList = getElementList(element, name); return (nodeList.getLength() == 0) ? null : (Element) nodeList.item(0); }
}
</source>
Use the Document.getElementsByTagName() method to quickly and easily locate elements by name.
<source lang="java">
/*
* Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */
import java.io.PrintWriter; import org.w3c.dom.Attr; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.NamedNodeMap; import org.w3c.dom.NodeList; import org.w3c.dom.Text; import org.xml.sax.SAXException; import org.xml.sax.SAXNotRecognizedException; import org.xml.sax.SAXNotSupportedException; import org.xml.sax.SAXParseException; /**
* A sample DOM filter. This sample program illustrates how to * use the Document#getElementsByTagName() method to quickly * and easily locate elements by name. * * @author Jeffrey Rodriguez, IBM * @author Andy Clark, IBM * * @version $Id: GetElementsByTagName.java 447683 2006-09-19 02:36:31Z mrglavas $ */
public class GetElementsByTagName {
// // Constants // // feature ids /** Namespaces feature id (http://xml.org/sax/features/namespaces). */ protected static final String NAMESPACES_FEATURE_ID = "http://xml.org/sax/features/namespaces"; /** Validation feature id (http://xml.org/sax/features/validation). */ protected static final String VALIDATION_FEATURE_ID = "http://xml.org/sax/features/validation"; /** Schema validation feature id (http://apache.org/xml/features/validation/schema). */ protected static final String SCHEMA_VALIDATION_FEATURE_ID = "http://apache.org/xml/features/validation/schema"; /** Schema full checking feature id (http://apache.org/xml/features/validation/schema-full-checking). */ protected static final String SCHEMA_FULL_CHECKING_FEATURE_ID = "http://apache.org/xml/features/validation/schema-full-checking"; /** Honour all schema locations feature id (http://apache.org/xml/features/honour-all-schemaLocations). */ protected static final String HONOUR_ALL_SCHEMA_LOCATIONS_ID = "http://apache.org/xml/features/honour-all-schemaLocations"; /** Validate schema annotations feature id (http://apache.org/xml/features/validate-annotations). */ protected static final String VALIDATE_ANNOTATIONS_ID = "http://apache.org/xml/features/validate-annotations"; /** Dynamic validation feature id (http://apache.org/xml/features/validation/dynamic). */ protected static final String DYNAMIC_VALIDATION_FEATURE_ID = "http://apache.org/xml/features/validation/dynamic"; /** XInclude feature id (http://apache.org/xml/features/xinclude). */ protected static final String XINCLUDE_FEATURE_ID = "http://apache.org/xml/features/xinclude"; /** XInclude fixup base URIs feature id (http://apache.org/xml/features/xinclude/fixup-base-uris). */ protected static final String XINCLUDE_FIXUP_BASE_URIS_FEATURE_ID = "http://apache.org/xml/features/xinclude/fixup-base-uris"; /** XInclude fixup language feature id (http://apache.org/xml/features/xinclude/fixup-language). */ protected static final String XINCLUDE_FIXUP_LANGUAGE_FEATURE_ID = "http://apache.org/xml/features/xinclude/fixup-language"; // default settings /** Default parser name (dom.wrappers.Xerces). */ protected static final String DEFAULT_PARSER_NAME = "dom.wrappers.Xerces"; /** Default element name (*). */ protected static final String DEFAULT_ELEMENT_NAME = "*"; /** Default namespaces support (true). */ protected static final boolean DEFAULT_NAMESPACES = true; /** Default validation support (false). */ protected static final boolean DEFAULT_VALIDATION = false; /** Default Schema validation support (false). */ protected static final boolean DEFAULT_SCHEMA_VALIDATION = false; /** Default Schema full checking support (false). */ protected static final boolean DEFAULT_SCHEMA_FULL_CHECKING = false; /** Default honour all schema locations (false). */ protected static final boolean DEFAULT_HONOUR_ALL_SCHEMA_LOCATIONS = false; /** Default validate schema annotations (false). */ protected static final boolean DEFAULT_VALIDATE_ANNOTATIONS = false; /** Default dynamic validation support (false). */ protected static final boolean DEFAULT_DYNAMIC_VALIDATION = false; /** Default XInclude processing support (false). */ protected static final boolean DEFAULT_XINCLUDE = false; /** Default XInclude fixup base URIs support (true). */ protected static final boolean DEFAULT_XINCLUDE_FIXUP_BASE_URIS = true; /** Default XInclude fixup language support (true). */ protected static final boolean DEFAULT_XINCLUDE_FIXUP_LANGUAGE = true; // // Public static methods // /** Prints the specified elements in the given document. */ public static void print(PrintWriter out, Document document, String elementName, String attributeName) { // get elements that match NodeList elements = document.getElementsByTagName(elementName); // is there anything to do? if (elements == null) { return; } // print all elements if (attributeName == null) { int elementCount = elements.getLength(); for (int i = 0; i < elementCount; i++) { Element element = (Element)elements.item(i); print(out, element, element.getAttributes()); } } // print elements with given attribute name else { int elementCount = elements.getLength(); for (int i = 0; i < elementCount; i++) { Element element = (Element)elements.item(i); NamedNodeMap attributes = element.getAttributes(); if (attributes.getNamedItem(attributeName) != null) { print(out, element, attributes); } } } } // print(PrintWriter,Document,String,String) // // Protected static methods // /** Prints the specified element. */ protected static void print(PrintWriter out, Element element, NamedNodeMap attributes) { out.print("<"); out.print(element.getNodeName()); if (attributes != null) { int attributeCount = attributes.getLength(); for (int i = 0; i < attributeCount; i++) { Attr attribute = (Attr)attributes.item(i); out.print(" "); out.print(attribute.getNodeName()); out.print("=\""); out.print(normalize(attribute.getNodeValue())); out.print("""); } } out.println(">"); out.flush(); } // print(PrintWriter,Element,NamedNodeMap) /** Normalizes the given string. */ protected static String normalize(String s) { StringBuffer str = new StringBuffer(); int len = (s != null) ? s.length() : 0; for (int i = 0; i < len; i++) { char ch = s.charAt(i); switch (ch) { case "<": { str.append("<"); break; } case ">": { str.append(">"); break; } case "&": { str.append("&"); break; } case """: { str.append("""); break; } case "\r": case "\n": { str.append("&#"); str.append(Integer.toString(ch)); str.append(";"); break; } default: { str.append(ch); } } } return str.toString(); } // normalize(String):String // // MAIN // /** Main program entry point. */ public static void main(String argv[]) { // is there anything to do? if (argv.length == 0) { printUsage(); System.exit(1); } // variables PrintWriter out = new PrintWriter(System.out); ParserWrapper parser = null; String elementName = DEFAULT_ELEMENT_NAME; String attributeName = null; boolean namespaces = DEFAULT_NAMESPACES; boolean validation = DEFAULT_VALIDATION; boolean schemaValidation = DEFAULT_SCHEMA_VALIDATION; boolean schemaFullChecking = DEFAULT_SCHEMA_FULL_CHECKING; boolean honourAllSchemaLocations = DEFAULT_HONOUR_ALL_SCHEMA_LOCATIONS; boolean validateAnnotations = DEFAULT_VALIDATE_ANNOTATIONS; boolean dynamicValidation = DEFAULT_DYNAMIC_VALIDATION; boolean xincludeProcessing = DEFAULT_XINCLUDE; boolean xincludeFixupBaseURIs = DEFAULT_XINCLUDE_FIXUP_BASE_URIS; boolean xincludeFixupLanguage = DEFAULT_XINCLUDE_FIXUP_LANGUAGE; // process arguments for (int i = 0; i < argv.length; i++) { String arg = argv[i]; if (arg.startsWith("-")) { String option = arg.substring(1); if (option.equals("p")) { // get parser name if (++i == argv.length) { System.err.println("error: Missing argument to -p option."); } String parserName = argv[i]; // create parser try { parser = (ParserWrapper)Class.forName(parserName).newInstance(); } catch (Exception e) { parser = null; System.err.println("error: Unable to instantiate parser ("+parserName+")"); } continue; } if (option.equals("e")) { if (++i == argv.length) { System.err.println("error: Missing argument to -e option."); } elementName = argv[i]; continue; } if (option.equals("a")) { if (++i == argv.length) { System.err.println("error: Missing argument to -a option."); } attributeName = argv[i]; continue; } if (option.equalsIgnoreCase("n")) { namespaces = option.equals("n"); continue; } if (option.equalsIgnoreCase("v")) { validation = option.equals("v"); continue; } if (option.equalsIgnoreCase("s")) { schemaValidation = option.equals("s"); continue; } if (option.equalsIgnoreCase("f")) { schemaFullChecking = option.equals("f"); continue; } if (option.equalsIgnoreCase("hs")) { honourAllSchemaLocations = option.equals("hs"); continue; } if (option.equalsIgnoreCase("va")) { validateAnnotations = option.equals("va"); continue; } if (option.equalsIgnoreCase("dv")) { dynamicValidation = option.equals("dv"); continue; } if (option.equalsIgnoreCase("xi")) { xincludeProcessing = option.equals("xi"); continue; } if (option.equalsIgnoreCase("xb")) { xincludeFixupBaseURIs = option.equals("xb"); continue; } if (option.equalsIgnoreCase("xl")) { xincludeFixupLanguage = option.equals("xl"); continue; } if (option.equals("h")) { printUsage(); continue; } } // use default parser? if (parser == null) { // create parser try { parser = (ParserWrapper)Class.forName(DEFAULT_PARSER_NAME).newInstance(); } catch (Exception e) { System.err.println("error: Unable to instantiate parser ("+DEFAULT_PARSER_NAME+")"); continue; } } // set parser features try { parser.setFeature(NAMESPACES_FEATURE_ID, namespaces); } catch (SAXException e) { System.err.println("warning: Parser does not support feature ("+NAMESPACES_FEATURE_ID+")"); } try { parser.setFeature(VALIDATION_FEATURE_ID, validation); } catch (SAXException e) { System.err.println("warning: Parser does not support feature ("+VALIDATION_FEATURE_ID+")"); } try { parser.setFeature(SCHEMA_VALIDATION_FEATURE_ID, schemaValidation); } catch (SAXException e) { System.err.println("warning: Parser does not support feature ("+SCHEMA_VALIDATION_FEATURE_ID+")"); } try { parser.setFeature(SCHEMA_FULL_CHECKING_FEATURE_ID, schemaFullChecking); } catch (SAXException e) { System.err.println("warning: Parser does not support feature ("+SCHEMA_FULL_CHECKING_FEATURE_ID+")"); } try { parser.setFeature(HONOUR_ALL_SCHEMA_LOCATIONS_ID, honourAllSchemaLocations); } catch (SAXException e) { System.err.println("warning: Parser does not support feature ("+HONOUR_ALL_SCHEMA_LOCATIONS_ID+")"); } try { parser.setFeature(VALIDATE_ANNOTATIONS_ID, validateAnnotations); } catch (SAXException e) { System.err.println("warning: Parser does not support feature ("+VALIDATE_ANNOTATIONS_ID+")"); } try { parser.setFeature(DYNAMIC_VALIDATION_FEATURE_ID, dynamicValidation); } catch (SAXException e) { System.err.println("warning: Parser does not support feature ("+DYNAMIC_VALIDATION_FEATURE_ID+")"); } try { parser.setFeature(XINCLUDE_FEATURE_ID, xincludeProcessing); } catch (SAXException e) { System.err.println("warning: Parser does not support feature ("+XINCLUDE_FEATURE_ID+")"); } try { parser.setFeature(XINCLUDE_FIXUP_BASE_URIS_FEATURE_ID, xincludeFixupBaseURIs); } catch (SAXException e) { System.err.println("warning: Parser does not support feature ("+XINCLUDE_FIXUP_BASE_URIS_FEATURE_ID+")"); } try { parser.setFeature(XINCLUDE_FIXUP_LANGUAGE_FEATURE_ID, xincludeFixupLanguage); } catch (SAXException e) { System.err.println("warning: Parser does not support feature ("+XINCLUDE_FIXUP_LANGUAGE_FEATURE_ID+")"); } // parse file try { Document document = parser.parse(arg); GetElementsByTagName.print(out, document, elementName, attributeName); } catch (SAXParseException e) { // ignore } catch (Exception e) { System.err.println("error: Parse error occurred - "+e.getMessage()); if (e instanceof SAXException) { Exception nested = ((SAXException)e).getException(); if (nested != null) { e = nested; } } e.printStackTrace(System.err); } } } // main(String[]) // // Private static methods // /** Prints the usage. */ private static void printUsage() { System.err.println("usage: java dom.GetElementsByTagName (options) uri ..."); System.err.println(); System.err.println("options:"); System.err.println(" -p name Select parser by name."); System.err.println(" -e name Specify element name for search."); System.err.println(" -a name Specify attribute name for specified elements."); System.err.println(" -n | -N Turn on/off namespace processing."); System.err.println(" -v | -V Turn on/off validation."); System.err.println(" -s | -S Turn on/off Schema validation support."); System.err.println(" NOTE: Not supported by all parsers."); System.err.println(" -f | -F Turn on/off Schema full checking."); System.err.println(" NOTE: Requires use of -s and not supported by all parsers."); System.err.println(" -hs | -HS Turn on/off honouring of all schema locations."); System.err.println(" NOTE: Requires use of -s and not supported by all parsers."); System.err.println(" -va | -VA Turn on/off validation of schema annotations."); System.err.println(" NOTE: Requires use of -s and not supported by all parsers."); System.err.println(" -dv | -DV Turn on/off dynamic validation."); System.err.println(" NOTE: Not supported by all parsers."); System.err.println(" -xi | -XI Turn on/off XInclude processing."); System.err.println(" NOTE: Not supported by all parsers."); System.err.println(" -xb | -XB Turn on/off base URI fixup during XInclude processing."); System.err.println(" NOTE: Requires use of -xi and not supported by all parsers."); System.err.println(" -xl | -XL Turn on/off language fixup during XInclude processing."); System.err.println(" NOTE: Requires use of -xi and not supported by all parsers."); System.err.println(" -h This help screen."); System.err.println(); System.err.println("defaults:"); System.err.println(" Parser: "+DEFAULT_PARSER_NAME); System.err.println(" Element: "+DEFAULT_ELEMENT_NAME); System.err.print(" Namespaces: "); System.err.println(DEFAULT_NAMESPACES ? "on" : "off"); System.err.print(" Validation: "); System.err.println(DEFAULT_VALIDATION ? "on" : "off"); System.err.print(" Schema: "); System.err.println(DEFAULT_SCHEMA_VALIDATION ? "on" : "off"); System.err.print(" Schema full checking: "); System.err.println(DEFAULT_SCHEMA_FULL_CHECKING ? "on" : "off"); System.err.print(" Honour all schema locations: "); System.err.println(DEFAULT_HONOUR_ALL_SCHEMA_LOCATIONS ? "on" : "off"); System.err.print(" Validate annotations: "); System.err.println(DEFAULT_VALIDATE_ANNOTATIONS ? "on" : "off"); System.err.print(" Dynamic: "); System.err.println(DEFAULT_DYNAMIC_VALIDATION ? "on" : "off"); System.err.print(" XInclude: "); System.err.println(DEFAULT_XINCLUDE ? "on" : "off"); System.err.print(" XInclude base URI fixup: "); System.err.println(DEFAULT_XINCLUDE_FIXUP_BASE_URIS ? "on" : "off"); System.err.print(" XInclude language fixup: "); System.err.println(DEFAULT_XINCLUDE_FIXUP_LANGUAGE ? "on" : "off"); } // printUsage()
} // class GetElementsByTagName
/**
* Encapsulates a DOM parser.
*
* @version $Id: ParserWrapper.java 447683 2006-09-19 02:36:31Z mrglavas $
*/
interface ParserWrapper {
//
// ParserWrapper methods
//
/** Parses the specified URI and returns the document. */
public Document parse(String uri) throws Exception;
/**
* Set the state of a feature.
*
* Set the state of any feature in a SAX2 parser. The parser
* might not recognize the feature, and if it does recognize
* it, it might not be able to fulfill the request.
*
* @param featureId The unique identifier (URI) of the feature.
* @param state The requested state of the feature (true or false).
*
* @exception org.xml.sax.SAXNotRecognizedException If the
* requested feature is not known.
* @exception org.xml.sax.SAXNotSupportedException If the
* requested feature is known, but the requested
* state is not supported.
* @exception org.xml.sax.SAXException If there is any other
* problem fulfilling the request.
*/
public void setFeature(String featureId, boolean state)
throws SAXNotRecognizedException, SAXNotSupportedException;
/** Returns the document information. */
public DocumentInfo getDocumentInfo();
//
// Interfaces
//
/**
* This interface is here to query information about the document
* implementation returned by the ParserWrapper#parse
* method.
*
* @author Andy Clark, IBM
*/
public interface DocumentInfo {
//
// DocumentInfo methods
//
/**
* Returns true if the specified text node is ignorable whitespace.
*/
public boolean isIgnorableWhitespace(Text text);
} // interface DocumentInfo
} // interface ParserWrapper
</source>