1

我有一个包含所有州积分的文件。我想解析它,这样我就可以为每个状态创建一个覆盖。我认为它的 xml 但不是具有 element_data 格式的传统格式。

有人提到它是一个 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"/>
4

2 回答 2

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 文件,因此应该对其进行处理。:-)

于 2012-04-10T20:52:04.600 回答
1

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

这样做的原因是因为 XML 很容易解析——这既是因为语法规则,也是因为 XML 生态系统已经成熟并且有很多用于解析的工具等等。

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

于 2012-04-10T20:54:44.430 回答