Разбор NSXMLElement в какао - PullRequest
2 голосов
/ 28 октября 2008

Я пытаюсь использовать XPath для анализа XML-документа. Один из моих NSXMLElement выглядит следующим образом, гипотетически говоря:

<foo bar="yummy">

Я пытаюсь получить значение для панели атрибутов, однако любая интерпретация кода, которую я использую, возвращает мне bar = "woo", что означает, что мне нужно выполнить дополнительную обработку строки, чтобы получить доступ к woo и Ву один.

По сути, я делаю что-то вроде

NSArray *nodes = [xmlDoc nodesForXPath:@"foo/@bar" error:&error];
xmlElement = [nodes objectAtIndex:0];

Есть ли какой-либо способ написать код выше, чтобы просто дать мне вкусный, вместо bar = "yummy", чтобы я мог избавить себя от разбора строки?

Спасибо.


Предполагается, что используется TouchXML, есть ли еще возможность получить похожие результаты? Как при получении только значения для атрибута без атрибута = "значение"? Это приводит к дальнейшему анализу строки, чтобы получить значение.

Ответы [ 4 ]

4 голосов
/ 28 октября 2008

Предполагается, что TouchXML API является точной копией реализации NSXML от Apple, поэтому он должен быть таким же, за исключением того, что вы замените все NS-методы на C-методы.

Классы TouxhXML отображаются непосредственно на классы NSXML. NSXMLNode -> CXMLNode , NSXMLDocument -> CXMLDocument , NSXMLElement -> CXMLElement . По понятным причинам вы не можете смешивать и сопоставлять классы NSXML и TouchXML.

Методы TouxhXML отображаются непосредственно на методы NSXML, но поддерживается только небольшое подмножество методов. Имена констант и перечислений почти эквивалентны (CXML ... vs NSXML ...), но значения констант не будут равнозначными

справка

Используя обычные классы Apple или каркас TouchXML, следующий код даст вам только строку "вкуснятина" для вашего примера.

 NSArray *nodes = [xmlDoc nodesForXPath:@"./foo/@bar" error:&err];
 NSString *value = [[nodes objectAtIndex:0] stringValue];

Удачи,

Брайан Г

3 голосов
/ 28 октября 2008

Если вы пытаетесь использовать класс NSXMLDocument на iPhone, вы будете очень разочарованы, потому что этот класс (и связанные с ним классы NSXMLNode, NSXMLElement и т. Д.) Недоступны на телефоне (они доступны в Симулятор, который может сбивать с толку).

Взгляните на libxml2, чтобы выполнить анализ XML на телефоне. Для этого есть несколько бесплатных фреймворков (я считаю TouchXML хорошим).

При этом, если вы хотите запустить этот код на Mac, вы можете использовать метод NSXMLElement -attributeForName:, чтобы получить только тот атрибут, который вам нужен.

2 голосов
/ 28 октября 2008

Бен прав - хотя код iPhone-SDK будет создаваться с NSXMLDocument и запускаться в симуляторе, он не будет работать на устройстве вообще. Документы, вероятно, упоминают это где-то, но это довольно неясно. TouchXML является частью TouchCode; Вы можете найти больше информации об этом здесь .

0 голосов
/ 20 ноября 2008

У iPhone есть доступ к NSXMLParser, который является миленьким парсером саксофона. У Аарона Хиллегаса есть хорошая статья об использовании NSXMLParser. Он не поддерживает XPath, но довольно удобен для копирования xml в ваши объекты данных.

Синтаксический анализ XML в какао

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