19f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson/*
29f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Licensed to the Apache Software Foundation (ASF) under one
39f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * or more contributor license agreements. See the NOTICE file
49f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * distributed with this work for additional information
59f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * regarding copyright ownership. The ASF licenses this file
69f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * to you under the Apache License, Version 2.0 (the  "License");
79f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * you may not use this file except in compliance with the License.
89f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * You may obtain a copy of the License at
99f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson *
109f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson *     http://www.apache.org/licenses/LICENSE-2.0
119f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson *
129f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Unless required by applicable law or agreed to in writing, software
139f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * distributed under the License is distributed on an "AS IS" BASIS,
149f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
159f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * See the License for the specific language governing permissions and
169f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * limitations under the License.
179f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */
189f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson/*
199f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * $Id: AttList.java 468654 2006-10-28 07:09:23Z minchau $
209f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */
219f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonpackage org.apache.xml.serializer.utils;
229f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
239f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport org.w3c.dom.Attr;
249f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport org.w3c.dom.NamedNodeMap;
259f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport org.w3c.dom.Node;
269f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
279f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport org.xml.sax.Attributes;
289f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
299f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson/**
309f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Wraps a DOM attribute list in a SAX Attributes.
319f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson *
329f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * This class is a copy of the one in org.apache.xml.utils.
339f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * It exists to cut the serializers dependancy on that package.
349f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * A minor changes from that package are:
359f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * DOMHelper reference changed to DOM2Helper, class is not "public"
369f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson *
379f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * This class is not a public API, it is only public because it is
389f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * used in org.apache.xml.serializer.
399f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson *
409f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @xsl.usage internal
419f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */
429f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonpublic final class AttList implements Attributes
439f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson{
449f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
459f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  /** List of attribute nodes          */
469f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  NamedNodeMap m_attrs;
479f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
489f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  /** Index of last attribute node          */
499f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  int m_lastIndex;
509f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
519f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  // ARGHH!!  JAXP Uses Xerces without setting the namespace processing to ON!
529f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  // DOM2Helper m_dh = new DOM2Helper();
539f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
549f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  /** Local reference to DOMHelper          */
559f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  DOM2Helper m_dh;
569f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
579f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson//  /**
589f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson//   * Constructor AttList
599f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson//   *
609f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson//   *
619f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson//   * @param attrs List of attributes this will contain
629f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson//   */
639f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson//  public AttList(NamedNodeMap attrs)
649f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson//  {
659f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson//
669f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson//    m_attrs = attrs;
679f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson//    m_lastIndex = m_attrs.getLength() - 1;
689f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson//    m_dh = new DOM2Helper();
699f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson//  }
709f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
719f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  /**
729f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * Constructor AttList
739f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *
749f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *
759f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @param attrs List of attributes this will contain
769f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @param dh DOMHelper
779f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   */
789f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  public AttList(NamedNodeMap attrs, DOM2Helper dh)
799f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  {
809f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
819f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    m_attrs = attrs;
829f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    m_lastIndex = m_attrs.getLength() - 1;
839f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    m_dh = dh;
849f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  }
859f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
869f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  /**
879f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * Get the number of attribute nodes in the list
889f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *
899f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *
909f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @return number of attribute nodes
919f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   */
929f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  public int getLength()
939f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  {
949f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    return m_attrs.getLength();
959f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  }
969f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
979f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  /**
989f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * Look up an attribute's Namespace URI by index.
999f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *
1009f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @param index The attribute index (zero-based).
1019f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @return The Namespace URI, or the empty string if none
1029f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *         is available, or null if the index is out of
1039f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *         range.
1049f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   */
1059f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  public String getURI(int index)
1069f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  {
1079f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    String ns = m_dh.getNamespaceOfNode(((Attr) m_attrs.item(index)));
1089f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    if(null == ns)
1099f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson      ns = "";
1109f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    return ns;
1119f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  }
1129f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
1139f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  /**
1149f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * Look up an attribute's local name by index.
1159f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *
1169f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @param index The attribute index (zero-based).
1179f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @return The local name, or the empty string if Namespace
1189f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *         processing is not being performed, or null
1199f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *         if the index is out of range.
1209f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   */
1219f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  public String getLocalName(int index)
1229f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  {
1239f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    return m_dh.getLocalNameOfNode(((Attr) m_attrs.item(index)));
1249f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  }
1259f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
1269f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  /**
1279f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * Look up an attribute's qualified name by index.
1289f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *
1299f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *
1309f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @param i The attribute index (zero-based).
1319f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *
1329f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @return The attribute's qualified name
1339f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   */
1349f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  public String getQName(int i)
1359f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  {
1369f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    return ((Attr) m_attrs.item(i)).getName();
1379f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  }
1389f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
1399f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  /**
1409f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * Get the attribute's node type by index
1419f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *
1429f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *
1439f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @param i The attribute index (zero-based)
1449f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *
1459f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @return the attribute's node type
1469f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   */
1479f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  public String getType(int i)
1489f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  {
1499f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    return "CDATA";  // for the moment
1509f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  }
1519f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
1529f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  /**
1539f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * Get the attribute's node value by index
1549f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *
1559f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *
1569f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @param i The attribute index (zero-based)
1579f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *
1589f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @return the attribute's node value
1599f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   */
1609f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  public String getValue(int i)
1619f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  {
1629f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    return ((Attr) m_attrs.item(i)).getValue();
1639f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  }
1649f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
1659f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  /**
1669f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * Get the attribute's node type by name
1679f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *
1689f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *
1699f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @param name Attribute name
1709f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *
1719f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @return the attribute's node type
1729f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   */
1739f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  public String getType(String name)
1749f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  {
1759f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    return "CDATA";  // for the moment
1769f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  }
1779f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
1789f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  /**
1799f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * Look up an attribute's type by Namespace name.
1809f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *
1819f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @param uri The Namespace URI, or the empty String if the
1829f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *        name has no Namespace URI.
1839f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @param localName The local name of the attribute.
1849f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @return The attribute type as a string, or null if the
1859f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *         attribute is not in the list or if Namespace
1869f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *         processing is not being performed.
1879f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   */
1889f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  public String getType(String uri, String localName)
1899f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  {
1909f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    return "CDATA";  // for the moment
1919f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  }
1929f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
1939f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  /**
1949f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * Look up an attribute's value by name.
1959f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *
1969f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *
1979f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @param name The attribute node's name
1989f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *
1999f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @return The attribute node's value
2009f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   */
2019f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  public String getValue(String name)
2029f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  {
2039f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    Attr attr = ((Attr) m_attrs.getNamedItem(name));
2049f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    return (null != attr)
2059f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          ? attr.getValue() : null;
2069f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  }
2079f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
2089f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  /**
2099f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * Look up an attribute's value by Namespace name.
2109f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *
2119f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @param uri The Namespace URI, or the empty String if the
2129f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *        name has no Namespace URI.
2139f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @param localName The local name of the attribute.
2149f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @return The attribute value as a string, or null if the
2159f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *         attribute is not in the list.
2169f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   */
2179f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  public String getValue(String uri, String localName)
2189f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  {
2199f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        Node a=m_attrs.getNamedItemNS(uri,localName);
2209f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        return (a==null) ? null : a.getNodeValue();
2219f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  }
2229f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
2239f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  /**
2249f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * Look up the index of an attribute by Namespace name.
2259f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *
2269f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @param uri The Namespace URI, or the empty string if
2279f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *        the name has no Namespace URI.
2289f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @param localPart The attribute's local name.
2299f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @return The index of the attribute, or -1 if it does not
2309f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *         appear in the list.
2319f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   */
2329f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  public int getIndex(String uri, String localPart)
2339f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  {
2349f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    for(int i=m_attrs.getLength()-1;i>=0;--i)
2359f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    {
2369f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson      Node a=m_attrs.item(i);
2379f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson      String u=a.getNamespaceURI();
2389f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson      if( (u==null ? uri==null : u.equals(uri))
2399f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson      &&
2409f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson      a.getLocalName().equals(localPart) )
2419f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    return i;
2429f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    }
2439f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    return -1;
2449f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  }
2459f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
2469f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  /**
2479f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * Look up the index of an attribute by raw XML 1.0 name.
2489f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *
2499f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @param qName The qualified (prefixed) name.
2509f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @return The index of the attribute, or -1 if it does not
2519f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *         appear in the list.
2529f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   */
2539f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  public int getIndex(String qName)
2549f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  {
2559f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    for(int i=m_attrs.getLength()-1;i>=0;--i)
2569f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    {
2579f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson      Node a=m_attrs.item(i);
2589f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson      if(a.getNodeName().equals(qName) )
2599f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    return i;
2609f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    }
2619f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    return -1;
2629f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  }
2639f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson}
2649f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
265