How to get the attribute value in the SAX parser
Asked Answered
L

3

-1

I have use the SAXParser to read the xml format. Then the startelement method run but I have no idea how to get the url in the method. I dont know what is the solution. Thank you

<enclosure length="1234567" type="image/jpeg" url="http://www.nasa.gov/images/content/664322main_31_lands_cropped_516-387.jpg"/> 
Lagomorph answered 2/7, 2012 at 4:50 Comment(0)
M
2

What language? What implementation? It is always a good idea to at least tag which language you are trying to implement in.

The idea is to iterate through the attributes parameter in the startElement() function/method:

A Java solution:

public void startElement(String namespaceURI, String localName, String qName, Attributes atts)
{
   int len = atts.getLength();
   // Loop through all attributes and save them as needed
   for(int i = 0; i < len; i++)
   {
      String sAttrName = atts.getLocalName(i);
      if(sAttrName.compareTo("URL") == 0) 
      {
          String sVal = atts.getValue(i);
          // Do something with the *.jpg
      }
   }
}

A C++ Xercesc solution:

void MyClass::startElement(const XMLCh *const uri, const XMLCh *const localname,
                                  const XMLCh *const qname, const Attributes &attributes)
{
    // Loop through all attributes and save them as needed
    XMLSize_t len = attributes.getLength();
    for(XMLSize_t index = 0; index < len; index++)
    {
         CString cAttrName(attributes.getLocalName(index));
         if(cAttrName.Compare(L"URL") == 0)
         {
              CString cVal(attributes.getValue(index));
              // Do something with the *.jpg
         }

    }
}
Morra answered 2/7, 2012 at 16:12 Comment(0)
Z
1

The attributes are passed into the startElement method:

for (int i = 0; i < attrs.getLength(); i++) {
    String attributeName = attrs.getLocalName(i);
    String attributeValue = attrs.getValue(i);
    System.out.println("found attribute with localname=" + attributeName 
    + " and value=" + attributeValue");
}
Zak answered 2/7, 2012 at 16:10 Comment(0)
C
0

here's my attempt at the SAX ContentHandler; it returns attributes and key / value pairs.

private String mCurrentEl = null;

/** on each element: start */
public void startElement (String uri, String localName, String qName, Attributes attrs) throws SAXException {

    /** keeping a reference */
    mCurrentEl = localName;

    /** each attribute */
    for (int i=0; i < attrs.getLength(); i++) {
        String name  = attrs.getLocalName(i);
        String value = attrs.getValue(i);
        System.out.println("attribute \"" + name + "\" has value \"" + value + "\".");
   }

}

/** on each element: data */
public void characters(char[] chars, int start, int length) throws SAXException {
    String data = new String(chars, start, length).trim();
    if(! data.equals("") && mCurrentEl != null) {
        System.out.println(mCurrentEl + ": " + data);
    }
}

/** on each element: end */
public void endElement(String uri, String localName, String qName) throws SAXException {
    mCurrentEl = null;
}
Compassionate answered 14/11, 2016 at 0:35 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.