这是什么类型的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"/> 
+3

xml是xml ...你可以像任何其他xml一样通过DOM解析器来执行此操作。 – 2012-04-10 20:46:02

+0

就像Marc B说的那样...这是一个完全有效的XML格式,没有什么特别的。在这种情况下,关键数据存储在属性中而不是元素中。您可以像解析其他任何XML文件一样解析它,就像读取每个元素的属性一样。 – 2012-04-10 20:50:39

代码:

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文件,因此它应该被处理。 :-)

+0

好吧,我看到另一个SO问题,提出了一种不同的方式来处理plist xml:http://stackoverflow.com/questions/2207404/iphone-can-we-parse-plistxml-file-using-nsxmlparser并想知道是否他们的建议是更好的解决方案。 – Padin215 2012-04-10 21:01:54

+1

@ 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

+0

好的,非常感谢快速的回应。第一次真正处理XML文件,所以试图找出结果。 – Padin215 2012-04-10 21:06:24

这看起来像是一种本土化的XML。将数据生成为XML并不罕见,这实际上并不是基于标准的语法。

之所以这样做,是因为XML易于解析 - 这既是因为语法规则,又因为XML生态系统已经成熟并且有很多解析工具。

仅仅因为它不是官方语法的一部分,您的数据并非无用!您可以使用XSLT将其转换为官方的另一个XML语法。对于初学者来说,我认为SVG是您最好的选择 - 您将获得很多非常具体的点数据,这些数据可能对SVG路径有用。