Разбор NSXMLElement в какао
Я пытаюсь использовать XPath для анализа XML-документа. Один из моих NSXMLElement выглядит следующим образом, гипотетически говоря:
<foo bar="yummy">
Я пытаюсь получить значение для панели атрибутов, однако любая интерпретация кода, которую я использую, возвращает мне bar="woo", что означает, что мне нужно выполнить дальнейшую обработку строки, чтобы получить доступ только к woo и woo.
По сути я делаю что-то вроде
NSArray *nodes = [xmlDoc nodesForXPath:@"foo/@bar" error:&error];
xmlElement = [nodes objectAtIndex:0];
Можно ли в любом случае написать код выше, чтобы просто дать мне вкусный, вместо bar="yummy", чтобы я мог избавить себя от разбора строки?
Благодарю.
Если предположить, что используется TouchXML, есть ли еще способ получить аналогичные результаты? Как при получении только значения для атрибута, без атрибута = "значение"? Это приводит к дальнейшему анализу строки, чтобы получить значение.
4 ответа
Предполагается, что TouchXML API является точной копией реализации NSXML от Apple, поэтому он должен быть таким же, за исключением того, что вы замените все NS-методы на C-методы.
Классы TouxhXML отображаются непосредственно на классы NSXML. NSXMLNode -> CXMLNode, NSXMLDocument -> CXMLDocument, NSXMLElement -> CXMLElement. По понятным причинам вы не можете смешивать и сочетать классы NSXML и TouchXML.
Методы TouxhXML отображаются непосредственно на методы NSXML, но поддерживается только небольшое подмножество методов. Имена констант и перечислений почти эквивалентны (CXML... vs NSXML...), но значения констант не будут эквивалентными
Используя обычные классы Apple или каркас TouchXML, следующий код даст вам только строку "yummy" для вашего примера.
NSArray *nodes = [xmlDoc nodesForXPath:@"./foo/@bar" error:&err];
NSString *value = [[nodes objectAtIndex:0] stringValue];
Удачи,
Брайан Дж.
Если вы пытаетесь использовать класс NSXMLDocument на iPhone, вы будете сильно разочарованы, потому что этот класс (и связанные с ним классы NSXMLNode, NSXMLElement и т. Д.) Недоступны на телефоне (они доступны в симуляторе, что может сбивать с толку).
Взгляните на libxml2, чтобы выполнить анализ XML на телефоне. Для этого есть несколько бесплатных фреймворков (я считаю TouchXML хорошим).
При этом, если вы хотите запустить этот код на Mac, вы можете использовать метод NSXMLElement -attributeForName:
вытащить только тот атрибут, который вы хотите.
Бен прав - хотя код iPhone-SDK будет собираться с NSXMLDocument и запускаться в симуляторе, он не будет работать на устройстве вообще. Документы, вероятно, упоминают это где-то, но это довольно неясно. TouchXML является частью TouchCode; Вы можете найти больше информации об этом здесь.
У iPhone действительно есть доступ к NSXMLParser, который является хорошим маленьким парсером саксофона. У Аарона Хиллегаса есть хорошая статья об использовании NSXMLParser. Он не поддерживает XPath, но довольно удобен для копирования xml в ваши объекты данных.