📄 xmlutils.java
字号:
/* * ==================================================================== * The Vovida Software License, Version 1.0 * * Copyright (c) 2000 Vovida Networks, Inc. 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 names "VOCAL", "Vovida Open Communication Application Library", * and "Vovida Open Communication Application Library (VOCAL)" must * not be used to endorse or promote products derived from this * software without prior written permission. For written * permission, please contact vocal@vovida.org. * * 4. Products derived from this software may not be called "VOCAL", nor * may "VOCAL" appear in their name, without prior written * permission of Vovida Networks, Inc. * * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, TITLE AND * NON-INFRINGEMENT ARE DISCLAIMED. IN NO EVENT SHALL VOVIDA * NETWORKS, INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT DAMAGES * IN EXCESS OF $1,000, NOR FOR ANY 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 Vovida * Networks, Inc. and many individuals on behalf of Vovida Networks, * Inc. For more information on Vovida Networks, Inc., please see * <http://www.vovida.org/>. * */package vocal.data;import org.w3c.dom.Document;import org.w3c.dom.NodeList;import org.w3c.dom.*;import org.xml.sax.*;/** * $RCSfile$ * * @author $Author$, $Date$ * @version $Revision$ */public class XMLUtils{ // used for traverse method private StringBuffer traverseBuffer; /** * */ public static String getAttribute(Element parent, String childName, String attributeName) throws NoSuchNodeException { NodeList nodes = parent.getElementsByTagName(childName); if (nodes.getLength() < 1) { throw new NoSuchNodeException(childName + " of parent " + parent.getTagName() + " does not exist"); } Element child = (Element) (nodes.item(0)); return child.getAttribute(attributeName); } // returns first child of this name /** * */ public static Element getChildByName(Element parent, String name) throws NoSuchNodeException { NodeList nodes = parent.getChildNodes(); Node node = null; for (int i = 0; i < nodes.getLength(); i++) { node = nodes.item(i); if (node.getNodeName().equals(name)) { return (Element) node; } } throw new NoSuchNodeException("Child " + name + " of parent " + parent.getNodeName() + " not found"); } /** * * @param parent * @param childName * @param text * * @throws NoSuchNodeException * @throws NotTextNodeException */ public static void setContent(Element parent, String childName, String text) throws NoSuchNodeException, NotTextNodeException { Element child = getChildByName(parent, childName); setContent(child, text); } /** * * @param contentNode * @param text * * @throws NoSuchNodeException * @throws NotTextNodeException */ public static void setContent(Element contentNode, String text) throws NoSuchNodeException, NotTextNodeException { NodeList nl = contentNode.getChildNodes(); if (nl.getLength() == 0) { // there is no text associated with this node yet. throw new NoSuchNodeException(contentNode.getTagName() + " has no text"); } Node textNode = nl.item(0); try { ((CharacterData) textNode).setData(text); } catch (ClassCastException e) { throw new NotTextNodeException(contentNode.getTagName() + " not a text node"); } } /** * */ public static String getContent(Element contentNode) throws NotTextNodeException { NodeList nl = contentNode.getChildNodes(); Node textNode = nl.item(0); if (textNode == null) { return ""; } try { return ((CharacterData) textNode).getData(); } catch (ClassCastException e) { throw new NotTextNodeException(contentNode.getTagName() + " not a text node"); } } /** * */ public static String getContent(Element parent, String childName) throws NoSuchNodeException, NotTextNodeException { Element child = getChildByName(parent, childName); return getContent(child); } /** * We should be able to substitute the xsl identity function for this. */ public String buildXMLString(Node node) { traverseBuffer = new StringBuffer(); return traverse(node); } /** * */ private String traverse(Node node) { // is there anything to do? if (node == null) { return ""; } int type = node.getNodeType(); switch (type) { // traverse document case Node.DOCUMENT_NODE: { traverse(((Document) node).getDocumentElement()); break; } // traverse document fragment case Node.DOCUMENT_FRAGMENT_NODE: { traverse(node.getFirstChild()); break; } // traverse element with attributes case Node.ELEMENT_NODE: { traverseBuffer.append('<'); traverseBuffer.append(node.getNodeName()); NamedNodeMap attrs = node.getAttributes(); for (int i = 0; i < attrs.getLength(); i++) { Node attr = attrs.item(i); traverseBuffer.append(' '); traverseBuffer.append(attr.getNodeName()); traverseBuffer.append("=\""); traverseBuffer.append(attr.getNodeValue()); traverseBuffer.append('"'); } traverseBuffer.append(">"); NodeList children = node.getChildNodes(); if (children != null) { int len = children.getLength(); for (int i = 0; i < len; i++) { traverse(children.item(i)); } } break; } // traverse text case Node.TEXT_NODE: { traverseBuffer.append(node.getNodeValue().trim()); break; } } if (type == Node.ELEMENT_NODE) { traverseBuffer.append("</"); traverseBuffer.append(node.getNodeName()); traverseBuffer.append(">\n"); } return new String(traverseBuffer); } // end of traverse}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -