iphone xml xml-parsing nsxmlparser

iphone - XML Parse solo ciertos elementos secundarios



xml-parsing nsxmlparser (2)

Si usa c # y si cada SPEECH tiene solo 1 SPEAKER , puede hacer lo siguiente

XDocument xdoc = XDocument.Load("XMLFile1.xml"); List<string> lines = xdoc.Descendants("SPEECH").Where(e => e.Element("SPEAKER").Value.ToUpper() == "NARRATOR").Elements("LINE").Select(e => e.Value).ToList();

Esta puede ser una pregunta básica pero, tengo una obra de teatro que está en formato xml. Quiero tomar el altavoz y las líneas que tiene el altavoz en un diccionario para agregarlo a una matriz. Aquí está el formato

<SPEECH> <SPEAKER>Narrator</SPEAKER> <LINE>Two households, both alike in dignity,</LINE> <LINE>In fair Verona, where we lay our scene,</LINE> <LINE>From ancient grudge break to new mutiny,</LINE> <LINE>Where civil blood makes civil hands unclean.</LINE> <LINE>From forth the fatal loins of these two foes</LINE> <LINE>A pair of star-cross''d lovers take their life;</LINE> <LINE>Whole misadventured piteous overthrows</LINE> <LINE>Do with their death bury their parents'' strife.</LINE> <LINE>The fearful passage of their death-mark''d love,</LINE> <LINE>And the continuance of their parents'' rage,</LINE> <LINE>Which, but their children''s end, nought could remove,</LINE> <LINE>Is now the two hours'' traffic of our stage;</LINE> <LINE>The which if you with patient ears attend,</LINE> <LINE>What here shall miss, our toil shall strive to mend.</LINE> </SPEECH>

Así que quiero tomar el Narrator como el altavoz y las líneas que tiene y agregarlo al diccionario. Después de eso, quiero agregar el diccionario a la matriz y luego borrar el diccionario.

¿Cómo puedo hacer esto?

Gracias


Estoy deduciendo de una de las etiquetas originales en tu pregunta, xcode , que estás haciendo en Objective-C. Además NSXMLParser que quería usar NSXMLParser .

Entonces, supongamos que tienes (a) una matriz mutable de speeches ; (b) un diccionario mutable para el speech actual; (c) una matriz mutable de lines para cada discurso; y (d) una cadena mutable, value , que capturará los caracteres encontrados entre el comienzo de un nombre de elemento y el final del nombre de ese elemento.

Luego, debe implementar los métodos NSXMLParserDelegate . Por ejemplo, cuando está analizando, en su didStartElement , si encuentra un nombre de elemento de voz, crea un diccionario:

if ([elementName isEqualToString:@"SPEECH"]) { speech = [[NSMutableDictionary alloc] init]; lines = [[NSMutableArray alloc] init]; } else { value = [[NSMutableString alloc] init]; }

A medida que encuentre caracteres en foundCharacters , los foundCharacters al value :

[value appendString:string];

Y, en su didEndElement , si encuentra el altavoz, didEndElement , si encuentra una línea, agréguela, y si encuentra la etiqueta de cierre SPEECH , continúe y agregue el discurso (con su SPEAKER y LINES a su conjunto de discursos:

if ([elementName isEqualToString:@"SPEAKER"]) { [speech setObject:value forKey:@"SPEAKER"]; } else if ([elementName isEqualToString:@"LINE"]) { [lines addObject:value]; } else if ([elementName isEqualToString:@"SPEECH"]) { [speech setObject:lines forKey:@"LINES"]; [speeches addObject:speech]; speech = nil; lines = nil; } value = nil;

Para obtener más información, consulte la Guía de programación XML basada en eventos o google "NSXMLParser tutorial".