Analisar um NSXMLElement em Cocoa
-
04-07-2019 - |
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.
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
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.