2012-04-10 6 views
1

私はすべての州のポイントを持つファイルを持っています。私はそれを解析したいので、私は各状態のオーバーレイを作成することができます。私はその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パーサーでこれを実行します。 –

+0

Marc Bさんのように、これは完全に有効なXML形式であり、本当に特別なことは何もありません。この場合、重要なデータは要素ではなく属性に格納されます。他のXMLファイルと同様に解析し、各要素の属性を読み込みます。 –

答えて

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ファイルです、そのようにそれが処理されるべきです。 :-)

+0

OK、私はplist xmlを扱う別の方法を示唆した別のSOの質問を見た:http://stackoverflow.com/questions/2207404/iphone-can-we-parse-plistxml-file-using-nsxmlparserそして疑問に思っていた彼らの提案はよりよい解決策になるだろう。 – Padin215

+1

@ Log139「プロパティリスト」はまったく別のものです。はい、xmlファイルもあります。しかし、そのフォーマットは非常に特殊です(https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/PropertyLists/UnderstandXMLPlist/UnderstandXMLPlist.html)。そして、あなたのXMLサンプルは、 'plist'互換ではありません。 (上記を有効な 'plist'に変換できたら、' NSDictionary * dic = [[NSDictionary alloc] initWithContentsOfFile:ファイル名 ')') –

+0

迅速な対応。初めて実際にXMLファイルを扱うので、物事を把握しようとしています。 – Padin215

1

これは自家製のXML風味のようです。実際に標準ベースの文法ではないXMLとしてデータを生成することは珍しいことではありません。

なぜなら、XMLは構文規則のために解析が容易であり、XMLエコシステムは成熟しており、とりわけ構文解析のためのツールがたくさんあるからです。

公式の文法の一部ではないため、あなたのデータは役に立たないわけではありません!あなたはである別のXML文法にXSLTを使って変換できます。まず、SVGはあなたの最善の策だと思います.SVGのパスで役に立つ点データがたくさんあります。

関連する問題