View Javadoc

1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one
3    * or more contributor license agreements.  See the NOTICE file
4    * distributed with this work for additional information
5    * regarding copyright ownership.  The ASF licenses this file
6    * to you under the Apache License, Version 2.0 (the
7    * "License"); you may not use this file except in compliance
8    * with the License.  You may obtain a copy of the License at
9    *
10   *   http://www.apache.org/licenses/LICENSE-2.0
11   *
12   * Unless required by applicable law or agreed to in writing,
13   * software distributed under the License is distributed on an
14   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15   * KIND, either express or implied.  See the License for the
16   * specific language governing permissions and limitations
17   * under the License.
18   */
19  package org.apache.myfaces.shared.util.xml;
20  
21  import org.w3c.dom.Element;
22  import org.w3c.dom.Node;
23  import org.w3c.dom.NodeList;
24  
25  import java.util.ArrayList;
26  import java.util.Collections;
27  import java.util.List;
28  
29  /**
30   * @author Manfred Geiler (latest modification by $Author: lu4242 $)
31   * @version $Revision: 1215302 $ $Date: 2011-12-16 16:46:34 -0500 (Fri, 16 Dec 2011) $
32   */
33  public class XmlUtils
34  {
35      private XmlUtils()
36      {
37          // hide from public access
38      }
39  
40      public static String getElementText(Element elem)
41      {
42          StringBuilder buf = new StringBuilder();
43          NodeList nodeList = elem.getChildNodes();
44          for (int i = 0, len = nodeList.getLength(); i < len; i++)
45          {
46              Node n = nodeList.item(i);
47              if (n.getNodeType() == Node.TEXT_NODE)
48              {
49                  buf.append(n.getNodeValue());
50              }
51              else
52              {
53                  //TODO see jsf-samples
54                  //throw new FacesException("Unexpected node type " + n.getNodeType());
55              }
56          }
57          return buf.toString();
58      }
59  
60  
61  
62      /**
63       * Return content of child element with given tag name.
64       * If more than one children with this name are present, the content of the last
65       * element is returned.
66       *
67       * @param elem
68       * @param childTagName
69       * @return content of child element or null if no child element with this name was found
70       */
71      public static String getChildText(Element elem, String childTagName)
72      {
73          NodeList nodeList = elem.getElementsByTagName(childTagName);
74          int len = nodeList.getLength();
75          if (len == 0)
76          {
77              return null;
78          }
79  
80          return getElementText((Element)nodeList.item(len - 1));
81          
82     }
83  
84  
85      /**
86       * Return list of content Strings of all child elements with given tag name.
87       * @param elem
88       * @param childTagName
89       * @return List 
90       */
91      public static List getChildTextList(Element elem, String childTagName)
92      {
93          NodeList nodeList = elem.getElementsByTagName(childTagName);
94          int len = nodeList.getLength();
95          if (len == 0)
96          {
97              return Collections.EMPTY_LIST;
98          }
99  
100         List list = new ArrayList(len);
101         for (int i = 0; i < len; i++)
102         {
103             list.add(getElementText((Element)nodeList.item(i)));
104         }
105         return list;
106         
107    }
108 
109 }