Следующая строка символов огромное влияние на xmlparser? - PullRequest
1 голос
/ 06 августа 2009

У меня есть вопрос об основном XML-файле, который я анализирую и просто вставляю в простые следующие строки (вводит). Я попытаюсь объяснить мою проблему с этим следующим примером. Я (все еще) строю дерево xml, и все, что от него требуется (это тестовое дерево) - это поместить сводку в список элементов. Затем я экспортирую его в список, чтобы увидеть, все ли сделано правильно.

Метод, который делает это, в синтаксическом анализаторе, который выглядит следующим образом

if([elementName isEqualToString:@"Book"]) {
[appDelegate.books addObject:aBook];

[aBook release];
aBook = nil;
}
else
{
[aBook setValue:currentElementValue forKey:elementName];
NSString *directions = [NSString stringWithFormat:currentElementValue];
[directionTree = setObject:directions forKey:@"directions"];
}
[currentElementValue release];
currentElementValue = nil;
}

экспорт для plistfile происходит в конце тега книг.

Ниже находится первый xmlfile

<?xml version="1.0" encoding="UTF-8"?>
<Books><Book id="1"><summary>Ero adn the ancient quest to measure the globe.</summary></Book><Book id="2"><summary>how the scientific revolution began.</summary></Book></Books>

Это мой вывод

http://img139.imageshack.us/img139/9175/picture6rtn.png

Если я сделаю некоторые корректировки, как здесь

<?xml version="1.0" encoding="UTF-8"?>
<Books><Book id="1">
<summary>Ero adn the ancient quest to measure the globe.</summary>
</Book>

<Book id="2">
<summary>how the scientific revolution began.</summary>
</Book>
</Books>

Мой ключ направления со строкой типа остается пустым ...

http://img248.imageshack.us/img248/5838/picture7y.png

Я никогда не знал, что если я просто введу вход, это окажет такое влияние. Кто-нибудь знает решение этой проблемы, так как мой настоящий XML-файл выглядит следующим образом.

пс. Самое смешное, что я действительно вижу (при отладке), что моя строка направлений (NSString directions) заполняется currentElementValue в в обоих случаях.

1 Ответ

1 голос
/ 06 августа 2009

Инструмент ваш код; в частности, чуть выше строки, которая гласит ...

[directionTree setObject:directions forKey:@"directions"];

... (я удалил шальные =) попробуйте добавить ...

NSLog(@"setting directions to '%@'", directions);

Могу поспорить, вы увидите, что вышеперечисленное регистрируется несколько раз на элемент. В частности, новая строка между тегом и сама по себе является элементом, так же как текст в теге

является элементом.

Так вот, вы могли бы продолжать идти по пути, пытаясь найти особый случай для того и другого, но это было бы неправильно.

Вам необходимо проанализировать XML как структурированный документ - как дерево узлов. В частности, вы должны где-то найти тег

и затем захватить элемент, который висит под ним (это должно быть, IIRC, тип TEXT на языке XML - было какое-то время).

Или, что еще лучше, используйте один из API-интерфейсов синтаксического анализа XML в системе. NSXMLDocument сразу приходит на ум. Если вы работаете на iPhone (который не был указан в этом вопросе), вам нужно использовать NSXMLParser, а не NSXMLDocument, поскольку он недоступен.

Или, что еще лучше, поскольку это выглядит как довольно простая инкапсуляция XML в обычной схеме данных, используйте CoreData. CoreData идеально подходит для хранения такого рода информации. Если ваш XML-файл предназначен для обмена, вы не захотите использовать CoreData, поскольку XML-файл, который он создает, полностью соответствует его собственному дизайну.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...