Pergunta

Eu estou tentando usar XPath para analisar um documento XML. Um dos olhares do meu NSXMLElement como o seguinte, hipoteticamente falando:

<foo bar="yummy">

Eu estou tentando obter o valor para a barra de atributos, no entanto, qualquer interpretação de uso de código I, dá-me de volta bar = "woo", o que significa que eu preciso fazer processamento adicional corda, a fim de obter acesso a woo e woo sozinho.

Essencialmente estou fazendo algo como

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

Existe uma maneira de escrever o código acima para me dar gostoso, contra bar = "gostoso" para que eu possa me aliviar de analisar a string?

Graças.


Assumindo TouchXML está sendo usado, é ainda uma maneira de obter resultados semelhantes? Como em agarrar apenas o valor para o atributo, sem o atributo = "valor"? Isso resulta em seguida, tendo ainda a analisar a cadeia para obter o valor para fora.

Foi útil?

Solução

A API TouchXML é suposto ser uma cópia exata da implementação NSXML da Apple, por isso deve ser o mesmo, exceto que você substitui todos NS-Método do com C-Métodos.

As classes TouxhXML mapear diretamente para as classes NSXML. NSXMLNode -> CXMLNode , NSXMLDocument -> CXMLDocument , NSXMLElement -> CXMLElement . Por razões óbvias você não pode misturar e combinar aulas NSXML e TouchXML.

Os métodos TouxhXML mapear directamente para métodos NSXML bem, mas apenas um pequeno subconjunto de métodos são suportados. nomes constantes e enum são quase equivalentes (CXML ... vs NSXML ...), mas valores constantes não será equival

referência

Usando tanto as classes da Apple regulares ou do quadro TouchXML o seguinte código vai lhe dar apenas o string "gostoso" para o seu exemplo.

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

Good Luck,

Brian G

Outras dicas

Se você está tentando usar a classe NSXMLDocument em um iPhone, você vai ser muito desapontado, porque esta classe (e relacionada NSXMLNode, NSXMLElement, etc classes) não estão disponíveis no telefone (Eles estão disponíveis em o simulador, que pode ser alterado).

Dê uma olhada em libxml2 para fazer análise XML no telefone. Existem várias estruturas livres (eu acredito TouchXML é uma boa) para fazer isso.

Dito isto, se você deseja executar este código em um Mac, você pode usar o método -attributeForName: NSXMLElement para retirar apenas o atributo que deseja.

direita de Ben - enquanto código iPhone SDK irá construir com NSXMLDocument e correr no simulador, não vai funcionar em tudo no dispositivo. provavelmente os docs mencioná-lo em algum lugar, mas é bastante obscura. TouchXML é parte de TouchCode; você pode encontrar mais informações sobre ele aqui .

O iPhone tem acesso a NSXMLParser que é um analisador pouco agradável sax. Aaron Hillegass tem um bom artigo sobre o uso NSXMLParser. Ele não suporta XPath, mas é bastante útil em rasgando xml em seus objetos de dados.

Parsing XML em Cocoa

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top