/* Nodes.java Purpose: Description: History: 2001/09/27 17:15:27, Create, Tom M. Yeh. Copyright (C) 2001 Potix Corporation. All Rights Reserved. {{IS_RIGHT This program is distributed under LGPL Version 2.1 in the hope that it will be useful, but WITHOUT ANY WARRANTY. }}IS_RIGHT */ package org.zkoss.xml; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.zkoss.idom.Item; /** * Node related utilities. * It supports iDOM. * * @author tomyeh */ public class Nodes { /** The empty node list. */ public static final NodeList EMPTY_NODELIST = new NodeList() { public int getLength() { return 0; } public Node item(int index) { return null; } }; /** * Get the text value of a node. * * <p>If the node is <i>not</i> an element, Node.getNodeValue is called. * If the node is an element, the returned string is a concatenation of * all values of TEXT_NODE and CDATA_SECTION_NODE. * * <p>Textual nodes include Text, CDATA and Binary (iDOM's extension). */ public static final String valueOf(Node node) { if (node instanceof Item) { String v = ((Item)node).getText(); return v != null ? v: ""; } if (node.getNodeType() == Node.ELEMENT_NODE) { StringBuffer sb = new StringBuffer(); NodeList nl = node.getChildNodes(); Node child; for (int j=0; (child=nl.item(j)) != null; ++j) { int type = child.getNodeType(); if (type==Node.TEXT_NODE || type==Node.CDATA_SECTION_NODE) sb.append(valueOf(child)); } return sb.toString(); } String v = node.getNodeValue(); return v != null ? v: ""; } }