2016-11-02 9 views
0

Я пытаюсь разобрать XML-файл, и я нашел правильный тег заголовка, но есть несколько тегов заголовков, и мне нужно разобрать только первый один. В настоящее время мой код выводит все теги заголовка Например:Как анализировать только 1 тег, когда есть однообразное имя с использованием Xerces C++

<book> 
    <title> 
    <title> 
    <title> 
<book> 
<movie> 
    <title> 
<movie> 

мне нужен только первый титул в книге.

Мой текущий код вытаскивает все теги заголовков в книге и выводит их. Есть ли способ остановиться после первого названия? Благодарю.

void MySaxHandler::startElement(
const XMLCh* const uri, 
const XMLCh* const localname, 
const XMLCh* const qname, 
const Attributes& attrs 
) { 
char* message = XMLString::transcode(localname); 
if (strcmp(message, "book") == 0) { 
    book = true; 
} 
else if (book && strcmp(message, "title") == 0) { 
    title = true; 
    titleBuffer = ""; 
} 
else if (strcmp(message, "movie") == 0) { 
    book = false; 
} 
else if (book && strcmp(message, "name") == 0) { 
    title = false; 
} 
XMLString::release(&message); 

ответ

0

Сделать title Пометка size_t и инициализировать его size_t(-1)

Затем измените if (book && strcmp(message, "title") == 0) в:

else if (book && strcmp(message, "title") == 0) { 
    title++; 
    if(0 == title) { // this is the one we want 
     titleBuffer = ""; 
     // perhaps registering a callback with the parser - say, firstTitleFound 
     // would allow you to do something like 
     // firstTitleFound(titleBuffer); 
     // and then capture the first titles of all the books in your document 
    } 
} 

Может также восстановить заголовок size_t(-1) всякий раз, когда вы столкнулись с какой-либо элемент, который может содержать Заголовок.

+0

Я не уверен, что понимаю, что вы имеете в виду. Я играл с этим кодом, и он либо печатает одно и то же, либо пустые теги – govCode

+0

@govCode Поскольку способ захвата названия является фиктивным. Если вы не знаете, как получить фактическое содержание заголовка, задайте еще один вопрос. В противном случае, чтобы проверить код, добавьте атрибут 'id' к вашим элементам заголовка в вашем исходном документе и используйте его значение (через параметр' attrs') в 'titleBuffer' –

 Смежные вопросы

  • Нет связанных вопросов^_^