我有一个包含所有州的积分的文件。我想解析它,所以我可以为每个州创建一个叠加层。我认为它的xml但不是具有element_data格式的传统xml。
有人提到它是一个plist xml。
是解析此类数据的最佳方法:
<states>
<state name ="Alaska" colour="#ff0000" >
<point lat="70.0187" lng="-141.0205"/>
<point lat="70.1292" lng="-141.7291"/>
<point lat="70.4515" lng="-144.8163"/>
<point lat="70.7471" lng="-148.4583"/>
<point lat="70.7923" lng="-151.1609"/>
<point lat="71.1470" lng="-152.6221"/>
<point lat="71.1185" lng="-153.9954"/>
<point lat="71.4307" lng="-154.8853"/>
<point lat="71.5232" lng="-156.7529"/>
<point lat="71.2796" lng="-157.9449"/>
<point lat="71.2249" lng="-159.6313"/>
<point lat="70.6363" lng="-161.8671"/>
<point lat="70.0843" lng="-163.5809"/>
<point lat="69.3028" lng="-165.2399"/>
<point lat="69.1782" lng="-166.8768"/>
<point lat="68.3344" lng="-168.0414"/>
答案 0 :(得分:2)
代码:
NSString* filePath = [[NSBundle mainBundle] pathForResource:@"data"
ofType:@"xml"];
NSString* xmlStr = [NSString stringWithContentsOfFile:filePath
encoding:NSUTF8StringEncoding
error:nil];
NSXMLDocument* xml = [[NSXMLDocument alloc] initWithXMLString:xmlStr
options:NSXMLDocumentTidyXML
error:nil];
NSMutableDictionary* states = [xml getChildrenInDictionary:@"states"];
我在为getChildrenInDictionary
撰写的类别中声明了NSXMLDocument
方法。
NSXMLDocument类别:
- (NSDictionary*)getChildrenInDictionary:(NSString *)path
{
NSMutableDictionary* result = [NSMutableDictionary dictionary];
NSArray* nodes = [[[self nodesForXPath:path error:nil] objectAtIndex:0] children];
for (NSXMLElement* element in nodes)
{
[result setValue:[element stringValue]
forKey:[element name]];
}
return result;
}
旁注:对我来说,它是一个完全有效的XML文件,因此应该进行处理。 : - )
答案 1 :(得分:1)
这看起来像是一种自制的XML风格。将数据生成为实际上不是基于标准的语法的XML并不罕见。
之所以这样,是因为XML很容易解析 - 因为语法规则,以及XML生态系统已经成熟并且有许多解析工具等等。
仅仅因为它不是官方语法的一部分,你的数据并非无用!您可以使用XSLT将其转换为 官方的另一种XML语法。首先,我认为SVG是你最好的选择 - 你可以获得许多非常具体的点数据,这些数据在SVG路径中很有用。