这是什么类型的XML文件?
我有一个包含所有状态点的文件。我想解析它,所以我可以为每个状态创建一个覆盖。我认为它的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"/>
代码:
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文件,因此它应该被处理。 :-)
好吧,我看到另一个SO问题,提出了一种不同的方式来处理plist xml:http://stackoverflow.com/questions/2207404/iphone-can-we-parse-plistxml-file-using-nsxmlparser并想知道是否他们的建议是更好的解决方案。 – Padin215 2012-04-10 21:01:54
@ Log139“属性列表”是另一回事。是的,它们也是xml文件。但是它们的格式非常具体(https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/PropertyLists/UnderstandXMLPlist/UnderstandXMLPlist.html)。而你的XML样本绝对不是'plist'兼容的。 (如果你可以将上面的代码转换成一个有效的'plist',那么确定你可以用如下简单的方法加载它:'NSDictionary * dic = [[NSDictionary alloc] initWithContentsOfFile:filename]') – 2012-04-10 21:04:27
好的,非常感谢快速的回应。第一次真正处理XML文件,所以试图找出结果。 – Padin215 2012-04-10 21:06:24
这看起来像是一种本土化的XML。将数据生成为XML并不罕见,这实际上并不是基于标准的语法。
之所以这样做,是因为XML易于解析 - 这既是因为语法规则,又因为XML生态系统已经成熟并且有很多解析工具。
仅仅因为它不是官方语法的一部分,您的数据并非无用!您可以使用XSLT将其转换为为官方的另一个XML语法。对于初学者来说,我认为SVG是您最好的选择 - 您将获得很多非常具体的点数据,这些数据可能对SVG路径有用。
xml是xml ...你可以像任何其他xml一样通过DOM解析器来执行此操作。 – 2012-04-10 20:46:02
就像Marc B说的那样...这是一个完全有效的XML格式,没有什么特别的。在这种情况下,关键数据存储在属性中而不是元素中。您可以像解析其他任何XML文件一样解析它,就像读取每个元素的属性一样。 – 2012-04-10 20:50:39