<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://jexp.ru/index.php?action=history&amp;feed=atom&amp;title=Java_Tutorial%2FXML%2FDOM_Attribute</id>
		<title>Java Tutorial/XML/DOM Attribute - История изменений</title>
		<link rel="self" type="application/atom+xml" href="http://jexp.ru/index.php?action=history&amp;feed=atom&amp;title=Java_Tutorial%2FXML%2FDOM_Attribute"/>
		<link rel="alternate" type="text/html" href="http://jexp.ru/index.php?title=Java_Tutorial/XML/DOM_Attribute&amp;action=history"/>
		<updated>2026-04-07T00:34:26Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://jexp.ru/index.php?title=Java_Tutorial/XML/DOM_Attribute&amp;diff=5082&amp;oldid=prev</id>
		<title>Admin: 1 версия</title>
		<link rel="alternate" type="text/html" href="http://jexp.ru/index.php?title=Java_Tutorial/XML/DOM_Attribute&amp;diff=5082&amp;oldid=prev"/>
				<updated>2010-06-01T05:17:32Z</updated>
		
		<summary type="html">&lt;p&gt;1 версия&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr style=&quot;vertical-align: top;&quot; lang=&quot;ru&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Предыдущая&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Версия 05:17, 1 июня 2010&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; style=&quot;text-align: center;&quot; lang=&quot;ru&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(нет различий)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Admin</name></author>	</entry>

	<entry>
		<id>http://jexp.ru/index.php?title=Java_Tutorial/XML/DOM_Attribute&amp;diff=5081&amp;oldid=prev</id>
		<title> в 17:44, 31 мая 2010</title>
		<link rel="alternate" type="text/html" href="http://jexp.ru/index.php?title=Java_Tutorial/XML/DOM_Attribute&amp;diff=5081&amp;oldid=prev"/>
				<updated>2010-05-31T17:44:27Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;==  An encoder for converting text to be used within XML attribute values ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.text.CharacterIterator;&lt;br /&gt;
import java.text.StringCharacterIterator;&lt;br /&gt;
import java.util.HashMap;&lt;br /&gt;
import java.util.Map;&lt;br /&gt;
/**&lt;br /&gt;
 * An encoder useful for converting text to be used within XML attribute values.&lt;br /&gt;
 * The following translations will be performed:&lt;br /&gt;
 * &amp;lt;table cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;1&amp;quot; border=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
 * &amp;lt;tr&amp;gt;&lt;br /&gt;
 * &amp;lt;th&amp;gt;Raw (Unencoded)&amp;lt;br/&amp;gt;Character&amp;lt;/th&amp;gt;&lt;br /&gt;
 * &amp;lt;th&amp;gt;Translated (Encoded)&amp;lt;br/&amp;gt;Entity&amp;lt;/th&amp;gt;&lt;br /&gt;
 * &amp;lt;/tr&amp;gt;&lt;br /&gt;
 * &amp;lt;tr&amp;gt;&lt;br /&gt;
 * &amp;lt;td&amp;gt; &amp;amp;amp; &amp;lt;/td&amp;gt;&lt;br /&gt;
 * &amp;lt;td&amp;gt; &amp;amp;amp;amp; &amp;lt;/td&amp;gt;&lt;br /&gt;
 * &amp;lt;/tr&amp;gt;&lt;br /&gt;
 * &amp;lt;tr&amp;gt;&lt;br /&gt;
 * &amp;lt;td&amp;gt; &amp;amp;lt; &amp;lt;/td&amp;gt;&lt;br /&gt;
 * &amp;lt;td&amp;gt; &amp;amp;amp;lt; &amp;lt;/td&amp;gt;&lt;br /&gt;
 * &amp;lt;/tr&amp;gt;&lt;br /&gt;
 * &amp;lt;tr&amp;gt;&lt;br /&gt;
 * &amp;lt;td&amp;gt; &amp;amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
 * &amp;lt;td&amp;gt; &amp;amp;amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
 * &amp;lt;/tr&amp;gt;&lt;br /&gt;
 * &amp;lt;tr&amp;gt;&lt;br /&gt;
 * &amp;lt;td&amp;gt; &amp;amp;quot; &amp;lt;/td&amp;gt;&lt;br /&gt;
 * &amp;lt;td&amp;gt; &amp;amp;amp;quot; &amp;lt;/td&amp;gt;&lt;br /&gt;
 * &amp;lt;/tr&amp;gt;&lt;br /&gt;
 * &amp;lt;tr&amp;gt;&lt;br /&gt;
 * &amp;lt;td&amp;gt; &amp;amp;#039; &amp;lt;/td&amp;gt;&lt;br /&gt;
 * &amp;lt;td&amp;gt; &amp;amp;amp;#039; &amp;lt;/td&amp;gt;&lt;br /&gt;
 * &amp;lt;/tr&amp;gt;&lt;br /&gt;
 * &amp;lt;tr&amp;gt;&lt;br /&gt;
 * &amp;lt;td&amp;gt;All Others&amp;lt;/td&amp;gt;&lt;br /&gt;
 * &amp;lt;td&amp;gt;No Translation&amp;lt;/td&amp;gt;&lt;br /&gt;
 * &amp;lt;/tr&amp;gt;&lt;br /&gt;
 * &amp;lt;/table&amp;gt;&lt;br /&gt;
 * &amp;lt;/p&amp;gt;&lt;br /&gt;
 */&lt;br /&gt;
public class XmlValueEncoder  {&lt;br /&gt;
    &lt;br /&gt;
    private static final Map&amp;lt;String, Character&amp;gt; SPECIAL_ENTITIES;&lt;br /&gt;
    &lt;br /&gt;
    static {&lt;br /&gt;
        SPECIAL_ENTITIES = new HashMap&amp;lt;String, Character&amp;gt;();&lt;br /&gt;
        &lt;br /&gt;
        SPECIAL_ENTITIES.put(&amp;quot;quot&amp;quot;, &amp;quot;&amp;quot;&amp;quot;);&lt;br /&gt;
        SPECIAL_ENTITIES.put(&amp;quot;gt&amp;quot;, &amp;quot;&amp;gt;&amp;quot;);&lt;br /&gt;
        SPECIAL_ENTITIES.put(&amp;quot;lt&amp;quot;, &amp;quot;&amp;lt;&amp;quot;);&lt;br /&gt;
        SPECIAL_ENTITIES.put(&amp;quot;amp&amp;quot;, &amp;quot;&amp;amp;&amp;quot;);&lt;br /&gt;
        &lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    /**&lt;br /&gt;
     * {@inheritDoc}&lt;br /&gt;
     *&lt;br /&gt;
     * @see org.jboss.dna.rumon.text.TextEncoder#encode(java.lang.String)&lt;br /&gt;
     */&lt;br /&gt;
    public String encode( String text ) {&lt;br /&gt;
        if (text == null) return null;&lt;br /&gt;
        StringBuilder sb = new StringBuilder();&lt;br /&gt;
        CharacterIterator iter = new StringCharacterIterator(text);&lt;br /&gt;
        for (char c = iter.first(); c != CharacterIterator.DONE; c = iter.next()) {&lt;br /&gt;
            switch (c) {&lt;br /&gt;
                case &amp;quot;&amp;amp;&amp;quot;:&lt;br /&gt;
                    sb.append(&amp;quot;&amp;amp;amp;&amp;quot;);&lt;br /&gt;
                    break;&lt;br /&gt;
                case &amp;quot;&amp;quot;&amp;quot;:&lt;br /&gt;
                    sb.append(&amp;quot;&amp;amp;quot;&amp;quot;);&lt;br /&gt;
                    break;&lt;br /&gt;
                case &amp;quot;&amp;lt;&amp;quot;:&lt;br /&gt;
                    sb.append(&amp;quot;&amp;amp;lt;&amp;quot;);&lt;br /&gt;
                    break;&lt;br /&gt;
                case &amp;quot;&amp;gt;&amp;quot;:&lt;br /&gt;
                    sb.append(&amp;quot;&amp;amp;gt;&amp;quot;);&lt;br /&gt;
                    break;&lt;br /&gt;
                case &amp;quot;\&amp;quot;&amp;quot;:&lt;br /&gt;
                    sb.append(&amp;quot;&amp;amp;#039;&amp;quot;);&lt;br /&gt;
                    break;&lt;br /&gt;
                default:&lt;br /&gt;
                    sb.append(c);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        return sb.toString();&lt;br /&gt;
    }&lt;br /&gt;
    /**&lt;br /&gt;
     * {@inheritDoc}&lt;br /&gt;
     *&lt;br /&gt;
     * @see org.jboss.dna.rumon.text.TextDecoder#decode(java.lang.String)&lt;br /&gt;
     */&lt;br /&gt;
    public String decode( String encodedText ) {&lt;br /&gt;
        if (encodedText == null) return null;&lt;br /&gt;
        StringBuilder sb = new StringBuilder();&lt;br /&gt;
        CharacterIterator iter = new StringCharacterIterator(encodedText);&lt;br /&gt;
        for (char c = iter.first(); c != CharacterIterator.DONE; c = iter.next()) {&lt;br /&gt;
            if (c == &amp;quot;&amp;amp;&amp;quot;) {&lt;br /&gt;
                int index = iter.getIndex();&lt;br /&gt;
                &lt;br /&gt;
                do {&lt;br /&gt;
                    c = iter.next();&lt;br /&gt;
                }&lt;br /&gt;
                while (c != CharacterIterator.DONE &amp;amp;&amp;amp; c != &amp;quot;;&amp;quot;);&lt;br /&gt;
                // We found a closing semicolon&lt;br /&gt;
                if (c == &amp;quot;;&amp;quot;) {&lt;br /&gt;
                    String s = encodedText.substring(index + 1, iter.getIndex());&lt;br /&gt;
                    &lt;br /&gt;
                    if (SPECIAL_ENTITIES.containsKey(s)) {&lt;br /&gt;
                        sb.append(SPECIAL_ENTITIES.get(s));&lt;br /&gt;
                        continue;&lt;br /&gt;
                        &lt;br /&gt;
                    }&lt;br /&gt;
                    &lt;br /&gt;
                    if (s.length() &amp;gt; 0 &amp;amp;&amp;amp; s.charAt(0) == &amp;quot;#&amp;quot;) {&lt;br /&gt;
                        try {&lt;br /&gt;
                            sb.append((char) Short.parseShort(s.substring(1, s.length())));&lt;br /&gt;
                            continue;&lt;br /&gt;
                        }&lt;br /&gt;
                        catch (NumberFormatException nfe) {&lt;br /&gt;
                            // This is possible in malformed encodings, but let it fall through&lt;br /&gt;
                        }&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
                &lt;br /&gt;
                // Malformed encoding, restore state and pass poorly encoded data back&lt;br /&gt;
                c = &amp;quot;&amp;amp;&amp;quot;;&lt;br /&gt;
                iter.setIndex(index);                            &lt;br /&gt;
            }&lt;br /&gt;
            sb.append(c);&lt;br /&gt;
        }&lt;br /&gt;
        return sb.toString();&lt;br /&gt;
    }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Copy the attribues on one element to the other ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import org.w3c.dom.Attr;&lt;br /&gt;
import org.w3c.dom.Element;&lt;br /&gt;
import org.w3c.dom.NamedNodeMap;&lt;br /&gt;
public class Utils {&lt;br /&gt;
  public static void copyAttributes(Element from, Element to) {&lt;br /&gt;
      NamedNodeMap attributes = from.getAttributes();&lt;br /&gt;
      for (int i = 0; i &amp;lt; attributes.getLength(); i++) {&lt;br /&gt;
          Attr node = (Attr) attributes.item(i);&lt;br /&gt;
          to.setAttributeNS(node.getNamespaceURI(), node.getName(), node.getValue());&lt;br /&gt;
      }&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Encode Xml Attribute ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
/** &lt;br /&gt;
 * &lt;br /&gt;
 * The ObjectStyle Group Software License, version 1.1&lt;br /&gt;
 * ObjectStyle Group - http://objectstyle.org/&lt;br /&gt;
 * &lt;br /&gt;
 * Copyright (c) 2002-2005, Andrei (Andrus) Adamchik and individual authors&lt;br /&gt;
 * of the software. All rights reserved.&lt;br /&gt;
 * &lt;br /&gt;
 * Redistribution and use in source and binary forms, with or without&lt;br /&gt;
 * modification, are permitted provided that the following conditions&lt;br /&gt;
 * are met:&lt;br /&gt;
 * &lt;br /&gt;
 * 1. Redistributions of source code must retain the above copyright&lt;br /&gt;
 *    notice, this list of conditions and the following disclaimer.&lt;br /&gt;
 * &lt;br /&gt;
 * 2. Redistributions in binary form must reproduce the above copyright&lt;br /&gt;
 *    notice, this list of conditions and the following disclaimer in&lt;br /&gt;
 *    the documentation and/or other materials provided with the&lt;br /&gt;
 *    distribution.&lt;br /&gt;
 * &lt;br /&gt;
 * 3. The end-user documentation included with the redistribution, if any,&lt;br /&gt;
 *    must include the following acknowlegement:&lt;br /&gt;
 *    &amp;quot;This product includes software developed by independent contributors&lt;br /&gt;
 *    and hosted on ObjectStyle Group web site (http://objectstyle.org/).&amp;quot;&lt;br /&gt;
 *    Alternately, this acknowlegement may appear in the software itself,&lt;br /&gt;
 *    if and wherever such third-party acknowlegements normally appear.&lt;br /&gt;
 * &lt;br /&gt;
 * 4. The names &amp;quot;ObjectStyle Group&amp;quot; and &amp;quot;Cayenne&amp;quot; must not be used to endorse&lt;br /&gt;
 *    or promote products derived from this software without prior written&lt;br /&gt;
 *    permission. For written permission, email&lt;br /&gt;
 *    &amp;quot;andrus at objectstyle dot org&amp;quot;.&lt;br /&gt;
 * &lt;br /&gt;
 * 5. Products derived from this software may not be called &amp;quot;ObjectStyle&amp;quot;&lt;br /&gt;
 *    or &amp;quot;Cayenne&amp;quot;, nor may &amp;quot;ObjectStyle&amp;quot; or &amp;quot;Cayenne&amp;quot; appear in their&lt;br /&gt;
 *    names without prior written permission.&lt;br /&gt;
 * &lt;br /&gt;
 * THIS SOFTWARE IS PROVIDED ``AS IS&amp;quot;&amp;quot; AND ANY EXPRESSED OR IMPLIED&lt;br /&gt;
 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES&lt;br /&gt;
 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE&lt;br /&gt;
 * DISCLAIMED.  IN NO EVENT SHALL THE OBJECTSTYLE GROUP OR&lt;br /&gt;
 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,&lt;br /&gt;
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT&lt;br /&gt;
 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF&lt;br /&gt;
 * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND&lt;br /&gt;
 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,&lt;br /&gt;
 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT&lt;br /&gt;
 * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF&lt;br /&gt;
 * SUCH DAMAGE.&lt;br /&gt;
 * &lt;br /&gt;
 * This software consists of voluntary contributions made by many&lt;br /&gt;
 * individuals and hosted on ObjectStyle Group web site.  For more&lt;br /&gt;
 * information on the ObjectStyle Group, please see&lt;br /&gt;
 * &amp;lt;http://objectstyle.org/&amp;gt;.&lt;br /&gt;
 */&lt;br /&gt;
import java.io.BufferedInputStream;&lt;br /&gt;
import java.io.BufferedOutputStream;&lt;br /&gt;
import java.io.BufferedReader;&lt;br /&gt;
import java.io.ByteArrayInputStream;&lt;br /&gt;
import java.io.ByteArrayOutputStream;&lt;br /&gt;
import java.io.File;&lt;br /&gt;
import java.io.FileInputStream;&lt;br /&gt;
import java.io.FileOutputStream;&lt;br /&gt;
import java.io.FileReader;&lt;br /&gt;
import java.io.IOException;&lt;br /&gt;
import java.io.InputStream;&lt;br /&gt;
import java.io.ObjectInputStream;&lt;br /&gt;
import java.io.ObjectOutputStream;&lt;br /&gt;
import java.io.OutputStream;&lt;br /&gt;
import java.io.Serializable;&lt;br /&gt;
import java.lang.reflect.Member;&lt;br /&gt;
import java.lang.reflect.Modifier;&lt;br /&gt;
import java.net.URL;&lt;br /&gt;
import java.sql.SQLException;&lt;br /&gt;
import java.util.ArrayList;&lt;br /&gt;
import java.util.Collection;&lt;br /&gt;
import java.util.Collections;&lt;br /&gt;
import java.util.ruparator;&lt;br /&gt;
import java.util.HashMap;&lt;br /&gt;
import java.util.Iterator;&lt;br /&gt;
import java.util.List;&lt;br /&gt;
import java.util.Map;&lt;br /&gt;
import java.util.regex.Pattern;&lt;br /&gt;
import javax.xml.parsers.ParserConfigurationException;&lt;br /&gt;
import javax.xml.parsers.SAXParser;&lt;br /&gt;
import javax.xml.parsers.SAXParserFactory;&lt;br /&gt;
&lt;br /&gt;
import org.xml.sax.SAXException;&lt;br /&gt;
import org.xml.sax.XMLReader;&lt;br /&gt;
/**&lt;br /&gt;
 * Contains various unorganized static utility methods used across Cayenne.&lt;br /&gt;
 * &lt;br /&gt;
 * @author Andrei Adamchik&lt;br /&gt;
 */&lt;br /&gt;
public class Util {&lt;br /&gt;
  /**&lt;br /&gt;
   * Encodes a string so that it can be used as an attribute value in an XML document.&lt;br /&gt;
   * Will do conversion of the greater/less signs, quotes and ampersands.&lt;br /&gt;
   */&lt;br /&gt;
  public static String encodeXmlAttribute(String str) {&lt;br /&gt;
      if (str == null)&lt;br /&gt;
          return null;&lt;br /&gt;
      int len = str.length();&lt;br /&gt;
      if (len == 0)&lt;br /&gt;
          return str;&lt;br /&gt;
      StringBuffer encoded = new StringBuffer();&lt;br /&gt;
      for (int i = 0; i &amp;lt; len; i++) {&lt;br /&gt;
          char c = str.charAt(i);&lt;br /&gt;
          if (c == &amp;quot;&amp;lt;&amp;quot;)&lt;br /&gt;
              encoded.append(&amp;quot;&amp;amp;lt;&amp;quot;);&lt;br /&gt;
          else if (c == &amp;quot;\&amp;quot;&amp;quot;)&lt;br /&gt;
              encoded.append(&amp;quot;&amp;amp;quot;&amp;quot;);&lt;br /&gt;
          else if (c == &amp;quot;&amp;gt;&amp;quot;)&lt;br /&gt;
              encoded.append(&amp;quot;&amp;amp;gt;&amp;quot;);&lt;br /&gt;
          else if (c == &amp;quot;\&amp;quot;&amp;quot;)&lt;br /&gt;
              encoded.append(&amp;quot;&amp;amp;apos;&amp;quot;);&lt;br /&gt;
          else if (c == &amp;quot;&amp;amp;&amp;quot;)&lt;br /&gt;
              encoded.append(&amp;quot;&amp;amp;amp;&amp;quot;);&lt;br /&gt;
          else&lt;br /&gt;
              encoded.append(c);&lt;br /&gt;
      }&lt;br /&gt;
      return encoded.toString();&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Find Element Or Create And Attribute ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.text.ParseException;&lt;br /&gt;
import java.text.SimpleDateFormat;&lt;br /&gt;
import java.util.ArrayList;&lt;br /&gt;
import java.util.Date;&lt;br /&gt;
import java.util.Iterator;&lt;br /&gt;
import org.w3c.dom.Document;&lt;br /&gt;
import org.w3c.dom.Element;&lt;br /&gt;
import org.w3c.dom.Node;&lt;br /&gt;
import org.w3c.dom.NodeList;&lt;br /&gt;
/*******************************************************************************&lt;br /&gt;
 * Copyright (C) 2007 Google Inc.&lt;br /&gt;
 * &lt;br /&gt;
 * Licensed under the Apache License, Version 2.0 (the &amp;quot;License&amp;quot;); you may not&lt;br /&gt;
 * use this file except in compliance with the License. You may obtain a copy of&lt;br /&gt;
 * the License at&lt;br /&gt;
 * &lt;br /&gt;
 * http://www.apache.org/licenses/LICENSE-2.0&lt;br /&gt;
 * &lt;br /&gt;
 * Unless required by applicable law or agreed to in writing, software&lt;br /&gt;
 * distributed under the License is distributed on an &amp;quot;AS IS&amp;quot; BASIS, WITHOUT&lt;br /&gt;
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the&lt;br /&gt;
 * License for the specific language governing permissions and limitations under&lt;br /&gt;
 * the License.&lt;br /&gt;
 ******************************************************************************/&lt;br /&gt;
/**&lt;br /&gt;
 * Various XML utilities.&lt;br /&gt;
 * &lt;br /&gt;
 * @author simonjsmith, ksim&lt;br /&gt;
 * @version 1.1 - ksim - March 6th, 2007 - Added functions regarding streaming&lt;br /&gt;
 * @version 1.2 - ksim - March 10th, 2007 - Added functions regarding DOM&lt;br /&gt;
 *          manipulation&lt;br /&gt;
 */&lt;br /&gt;
public class Utils {&lt;br /&gt;
  public static Element findElementElseCreateAndAttribute(Document document,&lt;br /&gt;
      Element parent, String element, String attributeName,&lt;br /&gt;
      String attributeValue) {&lt;br /&gt;
    NodeList nl = parent.getElementsByTagName(element);&lt;br /&gt;
    Element e = null;&lt;br /&gt;
    if (nl.getLength() == 0) {&lt;br /&gt;
      parent.appendChild(document.createElement(element));&lt;br /&gt;
      e = (Element) parent.getElementsByTagName(element).item(0);&lt;br /&gt;
      e.setAttribute(attributeName, attributeValue);&lt;br /&gt;
    }&lt;br /&gt;
    return e;&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Find Element Or Create And Set Attribute ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.text.ParseException;&lt;br /&gt;
import java.text.SimpleDateFormat;&lt;br /&gt;
import java.util.ArrayList;&lt;br /&gt;
import java.util.Date;&lt;br /&gt;
import java.util.Iterator;&lt;br /&gt;
import org.w3c.dom.Document;&lt;br /&gt;
import org.w3c.dom.Element;&lt;br /&gt;
import org.w3c.dom.Node;&lt;br /&gt;
import org.w3c.dom.NodeList;&lt;br /&gt;
/*******************************************************************************&lt;br /&gt;
 * Copyright (C) 2007 Google Inc.&lt;br /&gt;
 * &lt;br /&gt;
 * Licensed under the Apache License, Version 2.0 (the &amp;quot;License&amp;quot;); you may not&lt;br /&gt;
 * use this file except in compliance with the License. You may obtain a copy of&lt;br /&gt;
 * the License at&lt;br /&gt;
 * &lt;br /&gt;
 * http://www.apache.org/licenses/LICENSE-2.0&lt;br /&gt;
 * &lt;br /&gt;
 * Unless required by applicable law or agreed to in writing, software&lt;br /&gt;
 * distributed under the License is distributed on an &amp;quot;AS IS&amp;quot; BASIS, WITHOUT&lt;br /&gt;
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the&lt;br /&gt;
 * License for the specific language governing permissions and limitations under&lt;br /&gt;
 * the License.&lt;br /&gt;
 ******************************************************************************/&lt;br /&gt;
/**&lt;br /&gt;
 * Various XML utilities.&lt;br /&gt;
 * &lt;br /&gt;
 * @author simonjsmith, ksim&lt;br /&gt;
 * @version 1.1 - ksim - March 6th, 2007 - Added functions regarding streaming&lt;br /&gt;
 * @version 1.2 - ksim - March 10th, 2007 - Added functions regarding DOM&lt;br /&gt;
 *          manipulation&lt;br /&gt;
 */&lt;br /&gt;
public class Utils {&lt;br /&gt;
  public static Element findElementElseCreateAndSetAndAttribute(&lt;br /&gt;
      Document document, Element parent, String element, String value,&lt;br /&gt;
      String attributeName, String attributeValue) {&lt;br /&gt;
    Element e = findElementElseCreateAndAttribute(document, parent,&lt;br /&gt;
        element, attributeName, attributeValue);&lt;br /&gt;
    if (e != null)&lt;br /&gt;
      e.appendChild(document.createTextNode(value));&lt;br /&gt;
    return e;&lt;br /&gt;
  }&lt;br /&gt;
  public static Element findElementElseCreateAndAttribute(Document document,&lt;br /&gt;
      Element parent, String element, String attributeName,&lt;br /&gt;
      String attributeValue) {&lt;br /&gt;
    NodeList nl = parent.getElementsByTagName(element);&lt;br /&gt;
    Element e = null;&lt;br /&gt;
    if (nl.getLength() == 0) {&lt;br /&gt;
      parent.appendChild(document.createElement(element));&lt;br /&gt;
      e = (Element) parent.getElementsByTagName(element).item(0);&lt;br /&gt;
      e.setAttribute(attributeName, attributeValue);&lt;br /&gt;
    }&lt;br /&gt;
    return e;&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  get all the attributes for an Element ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import org.w3c.dom.Attr;&lt;br /&gt;
import org.w3c.dom.Element;&lt;br /&gt;
import org.w3c.dom.NamedNodeMap;&lt;br /&gt;
&lt;br /&gt;
public class Main {&lt;br /&gt;
  // get all the attributes for an Element&lt;br /&gt;
  public static Attr[] getAttrs(Element elem) {&lt;br /&gt;
      NamedNodeMap attrMap = elem.getAttributes();&lt;br /&gt;
      Attr [] attrArray = new Attr[attrMap.getLength()];&lt;br /&gt;
      for (int i=0; i&amp;lt;attrMap.getLength(); i++)&lt;br /&gt;
          attrArray[i] = (Attr)attrMap.item(i);&lt;br /&gt;
      return attrArray;&lt;br /&gt;
  } // getAttrs(Element):  Attr[]&lt;br /&gt;
 &lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Get an Attribute from an Element.  Returns an empty String if none found ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
/**********************************************************************************&lt;br /&gt;
*&lt;br /&gt;
* Copyright (c) 2003, 2004 The Regents of the University of Michigan, Trustees of Indiana University,&lt;br /&gt;
*                  Board of Trustees of the Leland Stanford, Jr., University, and The MIT Corporation&lt;br /&gt;
*&lt;br /&gt;
* Licensed under the Educational Community License Version 1.0 (the &amp;quot;License&amp;quot;);&lt;br /&gt;
* By obtaining, using and/or copying this Original Work, you agree that you have read,&lt;br /&gt;
* understand, and will comply with the terms and conditions of the Educational Community License.&lt;br /&gt;
* You may obtain a copy of the License at:&lt;br /&gt;
*&lt;br /&gt;
*      http://cvs.sakaiproject.org/licenses/license_1_0.html&lt;br /&gt;
*&lt;br /&gt;
* THE SOFTWARE IS PROVIDED &amp;quot;AS IS&amp;quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,&lt;br /&gt;
* INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE&lt;br /&gt;
* AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,&lt;br /&gt;
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING&lt;br /&gt;
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.&lt;br /&gt;
*&lt;br /&gt;
**********************************************************************************/&lt;br /&gt;
import java.util.ArrayList;&lt;br /&gt;
import java.util.List;&lt;br /&gt;
import org.w3c.dom.Element;&lt;br /&gt;
import org.w3c.dom.Node;&lt;br /&gt;
import org.w3c.dom.NodeList;&lt;br /&gt;
public class Utils {&lt;br /&gt;
  /**&lt;br /&gt;
   * Get an Attribute from an Element.  Returns an empty String if none found&lt;br /&gt;
   * @param element the containing Element&lt;br /&gt;
   * @param name the attribute name&lt;br /&gt;
   * @return Attribute as a String&lt;br /&gt;
   */&lt;br /&gt;
  public static String getAttribute(Element element, String name) {&lt;br /&gt;
    return element.getAttribute(name);&lt;br /&gt;
  }&lt;br /&gt;
  /**&lt;br /&gt;
   * Return a list of named Elements with a specific attribute value.&lt;br /&gt;
   * @param element the containing Element&lt;br /&gt;
   * @param name the tag name&lt;br /&gt;
   * @param attribute Attribute name&lt;br /&gt;
   * @param value Attribute value&lt;br /&gt;
   * @param returnFirst Return only the first matching value?&lt;br /&gt;
   * @return List of matching elements&lt;br /&gt;
   */&lt;br /&gt;
  public static List selectElementsByAttributeValue(Element element, String name,&lt;br /&gt;
                                                    String attribute, String value,&lt;br /&gt;
                                                    boolean returnFirst) {&lt;br /&gt;
    NodeList  elementList = element.getElementsByTagName(name);&lt;br /&gt;
    List      resultList  = new ArrayList();&lt;br /&gt;
    for (int i = 0; i &amp;lt; elementList.getLength(); i++) {&lt;br /&gt;
      if (getAttribute((Element) elementList.item(i), attribute).equals(value)) {&lt;br /&gt;
        resultList.add(elementList.item(i));&lt;br /&gt;
        if (returnFirst) {&lt;br /&gt;
          break;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    return resultList;&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Get Attribute ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
/**&lt;br /&gt;
 * Licensed to the Apache Software Foundation (ASF) under one&lt;br /&gt;
 * or more contributor license agreements. See the NOTICE file&lt;br /&gt;
 * distributed with this work for additional information&lt;br /&gt;
 * regarding copyright ownership. The ASF licenses this file&lt;br /&gt;
 * to you under the Apache License, Version 2.0 (the&lt;br /&gt;
 * &amp;quot;License&amp;quot;); you may not use this file except in compliance&lt;br /&gt;
 * with the License. You may obtain a copy of the License at&lt;br /&gt;
 *&lt;br /&gt;
 * http://www.apache.org/licenses/LICENSE-2.0&lt;br /&gt;
 *&lt;br /&gt;
 * Unless required by applicable law or agreed to in writing,&lt;br /&gt;
 * software distributed under the License is distributed on an&lt;br /&gt;
 * &amp;quot;AS IS&amp;quot; BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY&lt;br /&gt;
 * KIND, either express or implied. See the License for the&lt;br /&gt;
 * specific language governing permissions and limitations&lt;br /&gt;
 * under the License.&lt;br /&gt;
 */&lt;br /&gt;
import org.w3c.dom.NamedNodeMap;&lt;br /&gt;
import org.w3c.dom.Node;&lt;br /&gt;
/**&lt;br /&gt;
 * Few simple utils to read DOM. This is originally from the Jakarta Commons&lt;br /&gt;
 * Modeler.&lt;br /&gt;
 * &lt;br /&gt;
 * @author Costin Manolache&lt;br /&gt;
 */&lt;br /&gt;
public class Utils {&lt;br /&gt;
  public static String getAttribute(Node element, String attName) {&lt;br /&gt;
    NamedNodeMap attrs = element.getAttributes();&lt;br /&gt;
    if (attrs == null) {&lt;br /&gt;
      return null;&lt;br /&gt;
    }&lt;br /&gt;
    Node attN = attrs.getNamedItem(attName);&lt;br /&gt;
    if (attN == null) {&lt;br /&gt;
      return null;&lt;br /&gt;
    }&lt;br /&gt;
    return attN.getNodeValue();&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Has Attribute ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import org.w3c.dom.Element;&lt;br /&gt;
import org.w3c.dom.NamedNodeMap;&lt;br /&gt;
import org.w3c.dom.Node;&lt;br /&gt;
public class Utils {&lt;br /&gt;
&lt;br /&gt;
  public static boolean hasAttribute(Element element, String value) {&lt;br /&gt;
    NamedNodeMap attributes = element.getAttributes();&lt;br /&gt;
    for (int i = 0; i &amp;lt; attributes.getLength(); i++) {&lt;br /&gt;
        Node node = attributes.item(i);&lt;br /&gt;
        if (value.equals(node.getNodeValue())) {&lt;br /&gt;
            return true;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    return false;&lt;br /&gt;
}&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Output XML element Attributes ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import org.w3c.dom.Element;&lt;br /&gt;
import org.w3c.dom.NamedNodeMap;&lt;br /&gt;
import org.w3c.dom.Node;&lt;br /&gt;
public class Utils {&lt;br /&gt;
&lt;br /&gt;
  public static void printAttributes(Element element) {&lt;br /&gt;
      NamedNodeMap attributes = element.getAttributes();&lt;br /&gt;
      for (int i = 0; i &amp;lt; attributes.getLength(); i++) {&lt;br /&gt;
          Node node = attributes.item(i);&lt;br /&gt;
          System.err.println(&amp;quot;## prefix=&amp;quot; + node.getPrefix() + &amp;quot; localname:&amp;quot; + node.getLocalName()&lt;br /&gt;
                             + &amp;quot; value=&amp;quot; + node.getNodeValue());&lt;br /&gt;
      }&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  remove Attribute ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import org.w3c.dom.NamedNodeMap;&lt;br /&gt;
import org.w3c.dom.Node;&lt;br /&gt;
/**&lt;br /&gt;
 *  &lt;br /&gt;
 *&lt;br /&gt;
 * @author Costin Manolache&lt;br /&gt;
 */&lt;br /&gt;
public class Main {&lt;br /&gt;
  public static void removeAttribute( Node node, String attName ) {&lt;br /&gt;
    NamedNodeMap attributes=node.getAttributes();&lt;br /&gt;
    attributes.removeNamedItem(attName);                &lt;br /&gt;
}&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Return a list of named Elements with a specific attribute value. ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
/**********************************************************************************&lt;br /&gt;
*&lt;br /&gt;
* Copyright (c) 2003, 2004 The Regents of the University of Michigan, Trustees of Indiana University,&lt;br /&gt;
*                  Board of Trustees of the Leland Stanford, Jr., University, and The MIT Corporation&lt;br /&gt;
*&lt;br /&gt;
* Licensed under the Educational Community License Version 1.0 (the &amp;quot;License&amp;quot;);&lt;br /&gt;
* By obtaining, using and/or copying this Original Work, you agree that you have read,&lt;br /&gt;
* understand, and will comply with the terms and conditions of the Educational Community License.&lt;br /&gt;
* You may obtain a copy of the License at:&lt;br /&gt;
*&lt;br /&gt;
*      http://cvs.sakaiproject.org/licenses/license_1_0.html&lt;br /&gt;
*&lt;br /&gt;
* THE SOFTWARE IS PROVIDED &amp;quot;AS IS&amp;quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,&lt;br /&gt;
* INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE&lt;br /&gt;
* AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,&lt;br /&gt;
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING&lt;br /&gt;
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.&lt;br /&gt;
*&lt;br /&gt;
**********************************************************************************/&lt;br /&gt;
&lt;br /&gt;
import java.util.ArrayList;&lt;br /&gt;
import java.util.List;&lt;br /&gt;
import org.w3c.dom.Element;&lt;br /&gt;
import org.w3c.dom.Node;&lt;br /&gt;
import org.w3c.dom.NodeList;&lt;br /&gt;
public class Utils {&lt;br /&gt;
  /**&lt;br /&gt;
   * Get an Attribute from an Element.  Returns an empty String if none found&lt;br /&gt;
   * @param element the containing Element&lt;br /&gt;
   * @param name the attribute name&lt;br /&gt;
   * @return Attribute as a String&lt;br /&gt;
   */&lt;br /&gt;
  public static String getAttribute(Element element, String name) {&lt;br /&gt;
    return element.getAttribute(name);&lt;br /&gt;
  }&lt;br /&gt;
  /**&lt;br /&gt;
   * Return a list of named Elements with a specific attribute value.&lt;br /&gt;
   * @param element the containing Element&lt;br /&gt;
   * @param name the tag name&lt;br /&gt;
   * @param attribute Attribute name&lt;br /&gt;
   * @param value Attribute value&lt;br /&gt;
   * @param returnFirst Return only the first matching value?&lt;br /&gt;
   * @return List of matching elements&lt;br /&gt;
   */&lt;br /&gt;
  public static List selectElementsByAttributeValue(Element element, String name,&lt;br /&gt;
                                                    String attribute, String value,&lt;br /&gt;
                                                    boolean returnFirst) {&lt;br /&gt;
    NodeList  elementList = element.getElementsByTagName(name);&lt;br /&gt;
    List      resultList  = new ArrayList();&lt;br /&gt;
    for (int i = 0; i &amp;lt; elementList.getLength(); i++) {&lt;br /&gt;
      if (getAttribute((Element) elementList.item(i), attribute).equals(value)) {&lt;br /&gt;
        resultList.add(elementList.item(i));&lt;br /&gt;
        if (returnFirst) {&lt;br /&gt;
          break;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    return resultList;&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Returns the value of the attribute of the given element ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
/**&lt;br /&gt;
 * EasyBeans&lt;br /&gt;
 * Copyright (C) 2006 Bull S.A.S.&lt;br /&gt;
 * Contact: easybeans@ow2.org&lt;br /&gt;
 *&lt;br /&gt;
 * This library is free software; you can redistribute it and/or&lt;br /&gt;
 * modify it under the terms of the GNU Lesser General Public&lt;br /&gt;
 * License as published by the Free Software Foundation; either&lt;br /&gt;
 * version 2.1 of the License, or any later version.&lt;br /&gt;
 *&lt;br /&gt;
 * This library is distributed in the hope that it will be useful,&lt;br /&gt;
 * but WITHOUT ANY WARRANTY; without even the implied warranty of&lt;br /&gt;
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU&lt;br /&gt;
 * Lesser General Public License for more details.&lt;br /&gt;
 *&lt;br /&gt;
 * You should have received a copy of the GNU Lesser General Public&lt;br /&gt;
 * License along with this library; if not, write to the Free Software&lt;br /&gt;
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307&lt;br /&gt;
 * USA&lt;br /&gt;
 *&lt;br /&gt;
 * --------------------------------------------------------------------------&lt;br /&gt;
 * $Id: XMLUtils.java 2049 2007-11-20 14:32:56Z benoitf $&lt;br /&gt;
 * --------------------------------------------------------------------------&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
import java.util.ArrayList;&lt;br /&gt;
import java.util.List;&lt;br /&gt;
import java.util.Properties;&lt;br /&gt;
import org.w3c.dom.Element;&lt;br /&gt;
import org.w3c.dom.NamedNodeMap;&lt;br /&gt;
import org.w3c.dom.Node;&lt;br /&gt;
import org.w3c.dom.NodeList;&lt;br /&gt;
/**&lt;br /&gt;
 * Class with some useful methods on XML document.&lt;br /&gt;
 */&lt;br /&gt;
public final class XMLUtils {&lt;br /&gt;
    /**&lt;br /&gt;
     * Utility class, no constructor.&lt;br /&gt;
     */&lt;br /&gt;
    private XMLUtils() {&lt;br /&gt;
    }&lt;br /&gt;
    /**&lt;br /&gt;
     * Returns the value of the attribute of the given element.&lt;br /&gt;
     * @param base the element from where to search.&lt;br /&gt;
     * @param name of the attribute to get.&lt;br /&gt;
     * @return the value of this element.&lt;br /&gt;
     */&lt;br /&gt;
    public static String getAttributeValue(final Element base, final String name) {&lt;br /&gt;
        // get attribute of this element...&lt;br /&gt;
        NamedNodeMap mapAttributes = base.getAttributes();&lt;br /&gt;
        Node node = mapAttributes.getNamedItem(name);&lt;br /&gt;
        if (node != null) {&lt;br /&gt;
            return node.getNodeValue();&lt;br /&gt;
        }&lt;br /&gt;
        return null;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  return the right attribute node ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import org.w3c.dom.Attr;&lt;br /&gt;
import org.w3c.dom.Element;&lt;br /&gt;
&lt;br /&gt;
public class Main {&lt;br /&gt;
  // return the right attribute node&lt;br /&gt;
  public static Attr getAttr(Element elem, String name) {&lt;br /&gt;
      return elem.getAttributeNode(name);&lt;br /&gt;
  } // getAttr(Element, String):Attr&lt;br /&gt;
 &lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  return the value of the attribute of the given element with the given name ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import org.w3c.dom.Attr;&lt;br /&gt;
import org.w3c.dom.Element;&lt;br /&gt;
import org.w3c.dom.NamedNodeMap;&lt;br /&gt;
&lt;br /&gt;
public class Main {&lt;br /&gt;
  // return the value of the attribute of the given element with the given name&lt;br /&gt;
  public static String getAttrValue(Element elem, String name) {&lt;br /&gt;
      return elem.getAttribute(name);&lt;br /&gt;
  } // getAttr(Element, String):Attr&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Set an Attribute in an Element ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import org.w3c.dom.Element;&lt;br /&gt;
public class Utils {&lt;br /&gt;
  /**&lt;br /&gt;
   * Set an Attribute in an Element&lt;br /&gt;
   * @param element the containing Element&lt;br /&gt;
   * @param name the attribute name&lt;br /&gt;
   * @param value the attribute value&lt;br /&gt;
   */&lt;br /&gt;
  public static void setAttribute(Element element, String name, String value) {&lt;br /&gt;
    element.setAttribute(name, value);&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Set Attribute ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
/**&lt;br /&gt;
 * Licensed to the Apache Software Foundation (ASF) under one&lt;br /&gt;
 * or more contributor license agreements. See the NOTICE file&lt;br /&gt;
 * distributed with this work for additional information&lt;br /&gt;
 * regarding copyright ownership. The ASF licenses this file&lt;br /&gt;
 * to you under the Apache License, Version 2.0 (the&lt;br /&gt;
 * &amp;quot;License&amp;quot;); you may not use this file except in compliance&lt;br /&gt;
 * with the License. You may obtain a copy of the License at&lt;br /&gt;
 *&lt;br /&gt;
 * http://www.apache.org/licenses/LICENSE-2.0&lt;br /&gt;
 *&lt;br /&gt;
 * Unless required by applicable law or agreed to in writing,&lt;br /&gt;
 * software distributed under the License is distributed on an&lt;br /&gt;
 * &amp;quot;AS IS&amp;quot; BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY&lt;br /&gt;
 * KIND, either express or implied. See the License for the&lt;br /&gt;
 * specific language governing permissions and limitations&lt;br /&gt;
 * under the License.&lt;br /&gt;
 */&lt;br /&gt;
import javax.xml.namespace.QName;&lt;br /&gt;
import org.w3c.dom.Element;&lt;br /&gt;
import org.w3c.dom.NamedNodeMap;&lt;br /&gt;
import org.w3c.dom.Node;&lt;br /&gt;
/**&lt;br /&gt;
 * Few simple utils to read DOM. This is originally from the Jakarta Commons&lt;br /&gt;
 * Modeler.&lt;br /&gt;
 * &lt;br /&gt;
 * @author Costin Manolache&lt;br /&gt;
 */&lt;br /&gt;
public class Utils {&lt;br /&gt;
  public static void setAttribute(Node node, String attName, String val) {&lt;br /&gt;
    NamedNodeMap attributes = node.getAttributes();&lt;br /&gt;
    Node attNode = node.getOwnerDocument().createAttribute(attName);&lt;br /&gt;
    attNode.setNodeValue(val);&lt;br /&gt;
    attributes.setNamedItem(attNode);&lt;br /&gt;
}&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;/div&gt;</summary>
			</entry>

	</feed>