2008-10-28 2 views
2

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

<foo bar="yummy"> 

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

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

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

Есть в любом случае, чтобы написать код, чтобы просто дать мне вкуснятину, по сравнению с баром = «вкуснятина», так что я могу облегчить себе разбор строки?

Спасибо.


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

ответ

4

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

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

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

reference

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

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

Good Luck,

Brian G

3

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

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

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

2

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

0

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

Parsing XML in Cocoa

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