2012-07-02 1 views
-1

Я использую SAXParser для чтения XML-формата. Затем запускается метод startelement, но я понятия не имею, как получить url в методе. Я не знаю, что это за решение. СпасибоКак получить значение атрибута в синтаксическом анализаторе SAX

<enclosure length="1234567" type="image/jpeg" url="http://www.nasa.gov/images/content/664322main_31_lands_cropped_516-387.jpg"/> 

ответ

1

Атрибуты передаются в метод StartElement:

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"); 
} 
2

Какой язык? Какая реализация? Это всегда хорошая идея, по крайней мере тег, какой язык вы пытаетесь реализовать в

Идея заключается в том, чтобы перебирать параметра атрибутов в StartElement() функцию/метод:.

решение

Java,:

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 
     } 
    } 
} 

C++ Xercesc решение:

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 
     } 

    } 
} 
0

вот моя попытка на SAX ContentHandler; он возвращает атрибуты и пары ключ/значение.

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; 
}