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".