<?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%2FXML%2FDOM_Attribute</id>
		<title>Java/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%2FXML%2FDOM_Attribute"/>
		<link rel="alternate" type="text/html" href="http://jexp.ru/index.php?title=Java/XML/DOM_Attribute&amp;action=history"/>
		<updated>2026-04-07T00:43:14Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://jexp.ru/index.php?title=Java/XML/DOM_Attribute&amp;diff=8735&amp;oldid=prev</id>
		<title>Admin: 1 версия</title>
		<link rel="alternate" type="text/html" href="http://jexp.ru/index.php?title=Java/XML/DOM_Attribute&amp;diff=8735&amp;oldid=prev"/>
				<updated>2010-06-01T07:11:11Z</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;Версия 07:11, 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/XML/DOM_Attribute&amp;diff=8734&amp;oldid=prev</id>
		<title> в 18:01, 31 мая 2010</title>
		<link rel="alternate" type="text/html" href="http://jexp.ru/index.php?title=Java/XML/DOM_Attribute&amp;diff=8734&amp;oldid=prev"/>
				<updated>2010-05-31T18:01:47Z</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 Attributes implementation that can perform more operations than the attribute list helper supplied with the standard SAX2 distribution. ==&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;
 * Licensed to the Apache Software Foundation (ASF) under one or more&lt;br /&gt;
 * contributor license agreements.  See the NOTICE file distributed with&lt;br /&gt;
 * this work for additional information regarding copyright ownership.&lt;br /&gt;
 * The ASF licenses this file to You under the Apache License, Version 2.0&lt;br /&gt;
 * (the &amp;quot;License&amp;quot;); you may not use this file except in compliance with&lt;br /&gt;
 * 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, software&lt;br /&gt;
 * distributed under the License is distributed on an &amp;quot;AS IS&amp;quot; BASIS,&lt;br /&gt;
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.&lt;br /&gt;
 * See the License for the specific language governing permissions and&lt;br /&gt;
 * limitations under the License.&lt;br /&gt;
 */&lt;br /&gt;
import org.xml.sax.Attributes;&lt;br /&gt;
/**&lt;br /&gt;
 * An Attributes implementation that can perform more operations than the&lt;br /&gt;
 * attribute list helper supplied with the standard SAX2 distribution.&lt;br /&gt;
 */&lt;br /&gt;
public class AttributesImpl implements Attributes {&lt;br /&gt;
  //&lt;br /&gt;
  // Data&lt;br /&gt;
  //&lt;br /&gt;
  /** Head node. */&lt;br /&gt;
  private ListNode head;&lt;br /&gt;
  /** Tail node. */&lt;br /&gt;
  private ListNode tail;&lt;br /&gt;
  /** Length. */&lt;br /&gt;
  private int length;&lt;br /&gt;
  //&lt;br /&gt;
  // Attributes methods&lt;br /&gt;
  //&lt;br /&gt;
  /** Returns the number of attributes. */&lt;br /&gt;
  public int getLength() {&lt;br /&gt;
    return length;&lt;br /&gt;
  }&lt;br /&gt;
  /** Returns the index of the specified attribute. */&lt;br /&gt;
  public int getIndex(String raw) {&lt;br /&gt;
    ListNode place = head;&lt;br /&gt;
    int index = 0;&lt;br /&gt;
    while (place != null) {&lt;br /&gt;
      if (place.raw.equals(raw)) {&lt;br /&gt;
        return index;&lt;br /&gt;
      }&lt;br /&gt;
      index++;&lt;br /&gt;
      place = place.next;&lt;br /&gt;
    }&lt;br /&gt;
    return -1;&lt;br /&gt;
  }&lt;br /&gt;
  /** Returns the index of the specified attribute. */&lt;br /&gt;
  public int getIndex(String uri, String local) {&lt;br /&gt;
    ListNode place = head;&lt;br /&gt;
    int index = 0;&lt;br /&gt;
    while (place != null) {&lt;br /&gt;
      if (place.uri.equals(uri) &amp;amp;&amp;amp; place.local.equals(local)) {&lt;br /&gt;
        return index;&lt;br /&gt;
      }&lt;br /&gt;
      index++;&lt;br /&gt;
      place = place.next;&lt;br /&gt;
    }&lt;br /&gt;
    return -1;&lt;br /&gt;
  }&lt;br /&gt;
  /** Returns the attribute URI by index. */&lt;br /&gt;
  public String getURI(int index) {&lt;br /&gt;
    ListNode node = getListNodeAt(index);&lt;br /&gt;
    return node != null ? node.uri : null;&lt;br /&gt;
  } // getURI(int):String&lt;br /&gt;
  /** Returns the attribute local name by index. */&lt;br /&gt;
  public String getLocalName(int index) {&lt;br /&gt;
    ListNode node = getListNodeAt(index);&lt;br /&gt;
    return node != null ? node.local : null;&lt;br /&gt;
  } // getLocalName(int):String&lt;br /&gt;
  /** Returns the attribute raw name by index. */&lt;br /&gt;
  public String getQName(int index) {&lt;br /&gt;
    ListNode node = getListNodeAt(index);&lt;br /&gt;
    return node != null ? node.raw : null;&lt;br /&gt;
  } // getQName(int):String&lt;br /&gt;
  /** Returns the attribute type by index. */&lt;br /&gt;
  public String getType(int index) {&lt;br /&gt;
    ListNode node = getListNodeAt(index);&lt;br /&gt;
    return (node != null) ? node.type : null;&lt;br /&gt;
  } // getType(int):String&lt;br /&gt;
  /** Returns the attribute type by uri and local. */&lt;br /&gt;
  public String getType(String uri, String local) {&lt;br /&gt;
    ListNode node = getListNode(uri, local);&lt;br /&gt;
    return (node != null) ? node.type : null;&lt;br /&gt;
  } // getType(String,String):String&lt;br /&gt;
  /** Returns the attribute type by raw name. */&lt;br /&gt;
  public String getType(String raw) {&lt;br /&gt;
    ListNode node = getListNode(raw);&lt;br /&gt;
    return (node != null) ? node.type : null;&lt;br /&gt;
  } // getType(String):String&lt;br /&gt;
  /** Returns the attribute value by index. */&lt;br /&gt;
  public String getValue(int index) {&lt;br /&gt;
    ListNode node = getListNodeAt(index);&lt;br /&gt;
    return (node != null) ? node.value : null;&lt;br /&gt;
  } // getType(int):String&lt;br /&gt;
  /** Returns the attribute value by uri and local. */&lt;br /&gt;
  public String getValue(String uri, String local) {&lt;br /&gt;
    ListNode node = getListNode(uri, local);&lt;br /&gt;
    return (node != null) ? node.value : null;&lt;br /&gt;
  } // getType(String):String&lt;br /&gt;
  /** Returns the attribute value by raw name. */&lt;br /&gt;
  public String getValue(String raw) {&lt;br /&gt;
    ListNode node = getListNode(raw);&lt;br /&gt;
    return (node != null) ? node.value : null;&lt;br /&gt;
  } // getType(String):String&lt;br /&gt;
  //&lt;br /&gt;
  // Public methods&lt;br /&gt;
  //&lt;br /&gt;
  /** Adds an attribute. */&lt;br /&gt;
  public void addAttribute(String raw, String type, String value) {&lt;br /&gt;
    addAttribute(null, null, raw, type, value);&lt;br /&gt;
  }&lt;br /&gt;
  /** Adds an attribute. */&lt;br /&gt;
  public void addAttribute(String uri, String local, String raw, String type, String value) {&lt;br /&gt;
    ListNode node = new ListNode(uri, local, raw, type, value);&lt;br /&gt;
    if (length == 0) {&lt;br /&gt;
      head = node;&lt;br /&gt;
    } else {&lt;br /&gt;
      tail.next = node;&lt;br /&gt;
    }&lt;br /&gt;
    tail = node;&lt;br /&gt;
    length++;&lt;br /&gt;
  } // addAttribute(String,StringString,String,String)&lt;br /&gt;
  /** Inserts an attribute. */&lt;br /&gt;
  public void insertAttributeAt(int index, String raw, String type, String value) {&lt;br /&gt;
    insertAttributeAt(index, null, null, raw, type, value);&lt;br /&gt;
  }&lt;br /&gt;
  /** Inserts an attribute. */&lt;br /&gt;
  public void insertAttributeAt(int index, String uri, String local, String raw, String type,&lt;br /&gt;
      String value) {&lt;br /&gt;
    // if list is empty, add attribute&lt;br /&gt;
    if (length == 0 || index &amp;gt;= length) {&lt;br /&gt;
      addAttribute(uri, local, raw, type, value);&lt;br /&gt;
      return;&lt;br /&gt;
    }&lt;br /&gt;
    // insert at beginning of list&lt;br /&gt;
    ListNode node = new ListNode(uri, local, raw, type, value);&lt;br /&gt;
    if (index &amp;lt; 1) {&lt;br /&gt;
      node.next = head;&lt;br /&gt;
      head = node;&lt;br /&gt;
    } else {&lt;br /&gt;
      ListNode prev = getListNodeAt(index - 1);&lt;br /&gt;
      node.next = prev.next;&lt;br /&gt;
      prev.next = node;&lt;br /&gt;
    }&lt;br /&gt;
    length++;&lt;br /&gt;
  } // insertAttributeAt(int,String,String,String,String,String)&lt;br /&gt;
  /** Removes an attribute. */&lt;br /&gt;
  public void removeAttributeAt(int index) {&lt;br /&gt;
    if (length == 0) {&lt;br /&gt;
      return;&lt;br /&gt;
    }&lt;br /&gt;
    if (index == 0) {&lt;br /&gt;
      head = head.next;&lt;br /&gt;
      if (head == null) {&lt;br /&gt;
        tail = null;&lt;br /&gt;
      }&lt;br /&gt;
      length--;&lt;br /&gt;
    } else {&lt;br /&gt;
      ListNode prev = getListNodeAt(index - 1);&lt;br /&gt;
      ListNode node = getListNodeAt(index);&lt;br /&gt;
      if (node != null) {&lt;br /&gt;
        prev.next = node.next;&lt;br /&gt;
        if (node == tail) {&lt;br /&gt;
          tail = prev;&lt;br /&gt;
        }&lt;br /&gt;
        length--;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  } // removeAttributeAt(int)&lt;br /&gt;
  /** Removes the specified attribute. */&lt;br /&gt;
  public void removeAttribute(String raw) {&lt;br /&gt;
    removeAttributeAt(getIndex(raw));&lt;br /&gt;
  }&lt;br /&gt;
  /** Removes the specified attribute. */&lt;br /&gt;
  public void removeAttribute(String uri, String local) {&lt;br /&gt;
    removeAttributeAt(getIndex(uri, local));&lt;br /&gt;
  }&lt;br /&gt;
  //&lt;br /&gt;
  // Private methods&lt;br /&gt;
  //&lt;br /&gt;
  /** Returns the node at the specified index. */&lt;br /&gt;
  private ListNode getListNodeAt(int i) {&lt;br /&gt;
    for (ListNode place = head; place != null; place = place.next) {&lt;br /&gt;
      if (--i == -1) {&lt;br /&gt;
        return place;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    return null;&lt;br /&gt;
  } // getListNodeAt(int):ListNode&lt;br /&gt;
  /** Returns the first node with the specified uri and local. */&lt;br /&gt;
  public ListNode getListNode(String uri, String local) {&lt;br /&gt;
    if (uri != null &amp;amp;&amp;amp; local != null) {&lt;br /&gt;
      ListNode place = head;&lt;br /&gt;
      while (place != null) {&lt;br /&gt;
        if (place.uri != null &amp;amp;&amp;amp; place.local != null &amp;amp;&amp;amp; place.uri.equals(uri)&lt;br /&gt;
            &amp;amp;&amp;amp; place.local.equals(local)) {&lt;br /&gt;
          return place;&lt;br /&gt;
        }&lt;br /&gt;
        place = place.next;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    return null;&lt;br /&gt;
  } // getListNode(String,String):ListNode&lt;br /&gt;
  /** Returns the first node with the specified raw name. */&lt;br /&gt;
  private ListNode getListNode(String raw) {&lt;br /&gt;
    if (raw != null) {&lt;br /&gt;
      for (ListNode place = head; place != null; place = place.next) {&lt;br /&gt;
        if (place.raw != null &amp;amp;&amp;amp; place.raw.equals(raw)) {&lt;br /&gt;
          return place;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    return null;&lt;br /&gt;
  } // getListNode(String):ListNode&lt;br /&gt;
  //&lt;br /&gt;
  // Object methods&lt;br /&gt;
  //&lt;br /&gt;
  /** Returns a string representation of this object. */&lt;br /&gt;
  public String toString() {&lt;br /&gt;
    StringBuffer str = new StringBuffer();&lt;br /&gt;
    str.append(&amp;quot;[&amp;quot;);&lt;br /&gt;
    str.append(&amp;quot;len=&amp;quot;);&lt;br /&gt;
    str.append(length);&lt;br /&gt;
    str.append(&amp;quot;, {&amp;quot;);&lt;br /&gt;
    for (ListNode place = head; place != null; place = place.next) {&lt;br /&gt;
      str.append(place.toString());&lt;br /&gt;
      if (place.next != null) {&lt;br /&gt;
        str.append(&amp;quot;, &amp;quot;);&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    str.append(&amp;quot;}]&amp;quot;);&lt;br /&gt;
    return str.toString();&lt;br /&gt;
  } // toString():String&lt;br /&gt;
  //&lt;br /&gt;
  // Classes&lt;br /&gt;
  //&lt;br /&gt;
  /**&lt;br /&gt;
   * An attribute node.&lt;br /&gt;
   */&lt;br /&gt;
  static class ListNode {&lt;br /&gt;
    //&lt;br /&gt;
    // Data&lt;br /&gt;
    //&lt;br /&gt;
    /** Attribute uri. */&lt;br /&gt;
    public String uri;&lt;br /&gt;
    /** Attribute local. */&lt;br /&gt;
    public String local;&lt;br /&gt;
    /** Attribute raw. */&lt;br /&gt;
    public String raw;&lt;br /&gt;
    /** Attribute type. */&lt;br /&gt;
    public String type;&lt;br /&gt;
    /** Attribute value. */&lt;br /&gt;
    public String value;&lt;br /&gt;
    /** Next node. */&lt;br /&gt;
    public ListNode next;&lt;br /&gt;
    //&lt;br /&gt;
    // Constructors&lt;br /&gt;
    //&lt;br /&gt;
    /** Constructs a list node. */&lt;br /&gt;
    public ListNode(String uri, String local, String raw, String type, String value) {&lt;br /&gt;
      this.uri = uri;&lt;br /&gt;
      this.local = local;&lt;br /&gt;
      this.raw = raw;&lt;br /&gt;
      this.type = type;&lt;br /&gt;
      this.value = value;&lt;br /&gt;
    } // &amp;lt;init&amp;gt;(String,String,String,String,String)&lt;br /&gt;
    //&lt;br /&gt;
    // Object methods&lt;br /&gt;
    //&lt;br /&gt;
    /** Returns string representation of this object. */&lt;br /&gt;
    public String toString() {&lt;br /&gt;
      return raw != null ? raw : local;&lt;br /&gt;
    }&lt;br /&gt;
  } // class ListNode&lt;br /&gt;
} // class AttributesImpl&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;
  &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;
}&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;
== Find Container With Attribute Value Or Create ==&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;
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 findContainerWithAttributeValueElseCreate(&lt;br /&gt;
      Document document, Element parent, String element,&lt;br /&gt;
      String attributeName, String attributeValue) {&lt;br /&gt;
    NodeList nl = parent.getElementsByTagName(element);&lt;br /&gt;
    Element e;&lt;br /&gt;
    for (int i = 0; i &amp;lt; nl.getLength(); i++) {&lt;br /&gt;
      e = (Element) nl.item(i);&lt;br /&gt;
      if (e.getAttribute(attributeName).equals(attributeValue)) {&lt;br /&gt;
        return e;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    e = document.createElement(element);&lt;br /&gt;
    parent.appendChild(e);&lt;br /&gt;
    e.setAttribute(attributeName, attributeValue);&lt;br /&gt;
    return e;&lt;br /&gt;
  }&lt;br /&gt;
}&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;
== Find Container With Attribute Value Or Create And Set ==&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;
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 findContainerWithAttributeValueElseCreateAndSet(&lt;br /&gt;
      Document document, Element parent, String element, String value,&lt;br /&gt;
      String attributeName, String attributeValue) {&lt;br /&gt;
    Element e = findContainerWithAttributeValueElseCreate(document, parent,&lt;br /&gt;
        element, attributeName, attributeValue);&lt;br /&gt;
    e.appendChild(document.createTextNode(value));&lt;br /&gt;
    return e;&lt;br /&gt;
  }&lt;br /&gt;
  public static Element findContainerWithAttributeValueElseCreate(&lt;br /&gt;
      Document document, Element parent, String element,&lt;br /&gt;
      String attributeName, String attributeValue) {&lt;br /&gt;
    NodeList nl = parent.getElementsByTagName(element);&lt;br /&gt;
    Element e;&lt;br /&gt;
    for (int i = 0; i &amp;lt; nl.getLength(); i++) {&lt;br /&gt;
      e = (Element) nl.item(i);&lt;br /&gt;
      if (e.getAttribute(attributeName).equals(attributeValue)) {&lt;br /&gt;
        return e;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    e = document.createElement(element);&lt;br /&gt;
    parent.appendChild(e);&lt;br /&gt;
    e.setAttribute(attributeName, attributeValue);&lt;br /&gt;
    return e;&lt;br /&gt;
  }&lt;br /&gt;
}&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;
== Find the first direct child with a given 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;
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;
  /** Find the first direct child with a given attribute.&lt;br /&gt;
   * @param parent&lt;br /&gt;
   * @param elemName name of the element, or null for any &lt;br /&gt;
   * @param attName attribute we&amp;quot;re looking for&lt;br /&gt;
   * @param attVal attribute value or null if we just want any&lt;br /&gt;
   */ &lt;br /&gt;
  public static Node findChildWithAtt(Node parent, String elemName,&lt;br /&gt;
                                      String attName, String attVal) {&lt;br /&gt;
      &lt;br /&gt;
      Node child=DomUtil.getChild(parent, Node.ELEMENT_NODE);&lt;br /&gt;
      if( attVal== null ) {&lt;br /&gt;
          while( child!= null &amp;amp;&amp;amp;&lt;br /&gt;
                  ( elemName==null || elemName.equals( child.getNodeName())) &amp;amp;&amp;amp; &lt;br /&gt;
                  DomUtil.getAttribute(child, attName) != null ) {&lt;br /&gt;
              child=getNext(child, elemName, Node.ELEMENT_NODE );&lt;br /&gt;
          }&lt;br /&gt;
      } else {&lt;br /&gt;
          while( child!= null &amp;amp;&amp;amp; &lt;br /&gt;
                  ( elemName==null || elemName.equals( child.getNodeName())) &amp;amp;&amp;amp; &lt;br /&gt;
                  ! attVal.equals( DomUtil.getAttribute(child, attName)) ) {&lt;br /&gt;
              child=getNext(child, elemName, Node.ELEMENT_NODE );&lt;br /&gt;
          }&lt;br /&gt;
      }&lt;br /&gt;
      return child;        &lt;br /&gt;
  }  &lt;br /&gt;
  /** &lt;br /&gt;
   */ &lt;br /&gt;
  public static Node getNext( Node current, String name, int type) {&lt;br /&gt;
      Node first=current.getNextSibling();&lt;br /&gt;
      if( first==null ) return null;&lt;br /&gt;
      for (Node node = first; node != null;&lt;br /&gt;
           node = node.getNextSibling()) {&lt;br /&gt;
          &lt;br /&gt;
          if( type &amp;gt;= 0 &amp;amp;&amp;amp; node.getNodeType() != type ) continue;&lt;br /&gt;
          //System.out.println(&amp;quot;getNode: &amp;quot; + name + &amp;quot; &amp;quot; + node.getNodeName());&lt;br /&gt;
          if( name==null )&lt;br /&gt;
              return node;&lt;br /&gt;
          if( name.equals( node.getNodeName() ) ) {&lt;br /&gt;
              return node;&lt;br /&gt;
          }&lt;br /&gt;
      }&lt;br /&gt;
      return null;&lt;br /&gt;
  }&lt;br /&gt;
}&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;
== 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;
   &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;
}&lt;br /&gt;
   &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;
== 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;
*&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;
}&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;
== 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;
/**&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;
}&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;
== Get Attribute by QName ==&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;
 * 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 String getAttribute(Element element, QName attName) {&lt;br /&gt;
    return element.getAttributeNS(attName.getNamespaceURI(), attName.getLocalPart());&lt;br /&gt;
}&lt;br /&gt;
}&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;
== Get attribute&amp;quot;s 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;
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 attribute&amp;quot;s value&lt;br /&gt;
  public static String getValue(Attr attribute) {&lt;br /&gt;
      return attribute.getValue();&lt;br /&gt;
  } // getValue(Attr):String&lt;br /&gt;
 &lt;br /&gt;
}&lt;br /&gt;
   &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;
== 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;
  &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;
}&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;
== Recursive method to find a given 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;
import javax.xml.namespace.QName;&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;
public class Utils {&lt;br /&gt;
  /**&lt;br /&gt;
   * Recursive method to find a given attribute value&lt;br /&gt;
   */&lt;br /&gt;
  public static String recursiveGetAttributeValue(Element element, String attributeName) {&lt;br /&gt;
      String answer = null;&lt;br /&gt;
      try {&lt;br /&gt;
          answer = element.getAttribute(attributeName);&lt;br /&gt;
      } catch (Exception e) {&lt;br /&gt;
    &lt;br /&gt;
      }&lt;br /&gt;
      if (answer == null || answer.length() == 0) {&lt;br /&gt;
          Node parentNode = element.getParentNode();&lt;br /&gt;
          if (parentNode instanceof Element) {&lt;br /&gt;
              return recursiveGetAttributeValue((Element) parentNode, attributeName);&lt;br /&gt;
          }&lt;br /&gt;
      }&lt;br /&gt;
      return answer;&lt;br /&gt;
  }&lt;br /&gt;
}&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;
== Returns null, not &amp;quot;&amp;quot;, for a nonexistent 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;
import org.w3c.dom.Attr;&lt;br /&gt;
import org.w3c.dom.Element;&lt;br /&gt;
public class Utils {&lt;br /&gt;
  /**&lt;br /&gt;
   * Returns null, not &amp;quot;&amp;quot;, for a nonexistent attribute.&lt;br /&gt;
   * &lt;br /&gt;
   * @param e&lt;br /&gt;
   * @param attributeName&lt;br /&gt;
   * @return&lt;br /&gt;
   */&lt;br /&gt;
  public static String getAttributeValueEmptyNull(Element e, String attributeName) {&lt;br /&gt;
      Attr node = e.getAttributeNode(attributeName);&lt;br /&gt;
      if (node == null) {&lt;br /&gt;
          return null;&lt;br /&gt;
      }&lt;br /&gt;
      return node.getValue();&lt;br /&gt;
  }&lt;br /&gt;
}&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;
   &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;
}&lt;br /&gt;
   &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 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;
   &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;
  &lt;br /&gt;
  // return the value of the attribute of the given element&lt;br /&gt;
  // with the given name&lt;br /&gt;
  public static String getAttrValueNS(Element elem, String nsUri,&lt;br /&gt;
          String localName) {&lt;br /&gt;
      return elem.getAttributeNS(nsUri, localName);&lt;br /&gt;
  } // getAttrValueNS(Element, String):Attr&lt;br /&gt;
}&lt;br /&gt;
   &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;
== Retutns the value of the named 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;
import org.w3c.dom.Attr;&lt;br /&gt;
import org.w3c.dom.Element;&lt;br /&gt;
public class Utils {&lt;br /&gt;
&lt;br /&gt;
  /**&lt;br /&gt;
   * &amp;lt;p&amp;gt;Retutns the value of the named attribute of the given&lt;br /&gt;
   * element. If there is no such attribute, returns null.&amp;lt;/p&amp;gt;&lt;br /&gt;
   *&lt;br /&gt;
   * @param element element&lt;br /&gt;
   * @param name name&lt;br /&gt;
   * @return value&lt;br /&gt;
   */&lt;br /&gt;
  public static String getAttributeValue(Element element, String name)&lt;br /&gt;
  {&lt;br /&gt;
      Attr attribute = element.getAttributeNode(name);&lt;br /&gt;
      if(attribute == null) {&lt;br /&gt;
          return null;&lt;br /&gt;
      }&lt;br /&gt;
      else {&lt;br /&gt;
          return attribute.getValue();&lt;br /&gt;
      }&lt;br /&gt;
  }&lt;br /&gt;
}&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;
== 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;
  &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;
}&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;
== 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;
/**&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;
}&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;/div&gt;</summary>
			</entry>

	</feed>