Парсинг SAX - эффективный способ получить текстовые узлы

Учитывая этот отрывок XML

<?xml version="1.0"?>
<catalog>
   <book id="bk101">
      <author>Gambardella, Matthew</author>

В SAX легко получить значения атрибута:

@Override
public void startElement (String uri, String localName,
              String qName, Attributes attributes) throws SAXException{
    if(qName.equals("book")){
        String bookId = attributes.getValue("id");
        ...
    }
}

Но получить значение текстового узла, например, значение <author> тег, это довольно твердо...

private StringBuffer curCharValue = new StringBuffer(1024);

@Override
public void startElement (String uri, String localName,
              String qName, Attributes attributes) throws SAXException {
    if(qName.equals("author")){
        curCharValue.clear();
    }
}

@Override
public void characters (char ch[], int start, int length) throws SAXException
{
     //already synchronized
    curCharValue.append(char, start, length);
}

@Override
public void endElement (String uri, String localName, String qName)
throws SAXException
{
    if(qName.equals("author")){
        String author = curCharValue.toString();
    }
}
  1. Я не уверен, что вышеупомянутый образец даже работает, что Вы думаете об этом подходе?
  2. Существует ли лучший путь? (для получения текстового значения узла)
8
задан nanda 14 January 2010 в 14:23
поделиться

1 ответ

Это - обычный способ сделать это с SAX.

Просто остерегаются этого , символы () можно назвать несколько раз за тэг. Посмотрите этот , вопросом для большего количества информации Вот является полное пример .

Иначе вы могли дать попытку StAX.

9
ответ дан 5 December 2019 в 17:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: