2010-03-19 17 views
0

我訪問使用NSURL,web服務器這個數據我試圖決定是我應該讀這是XML或者我應該只使用NSScanner和撕裂出[數據]位我所需要的。我已經瀏覽了Web上的例子,從iPhone上的XML中提取字段,但對我所需要的東西來說,這似乎有點矯枉過正。任何人都可以提出任何建議或指引我朝着正確的方向發展。在一個理想的世界,我真的想只需指定[數據],並得到一個字符串返回「2046 3433 5674 3422 4456 8990 1200 5284」iPhone用於從XML讀取項目的選項?

<!DOCTYPE tubinerotationdata> 
<turbine version="1.0"> 
<status version="1.0" result="200">OK</status> 
<data version="1.0"> 
    2046 3433 5674 3422 4456 8990 1200 5284 
</data> 
</turbine> 

任何意見/想法大加讚賞。

gary

+0

我想我要去用NSXMLParser。它的確看起來有點矯枉過正,但它會成爲我將再次使用的東西,所以它可能值得在潛水時使用。只是想看看我是否在正確的軌道上,顯然是我。非常感謝。 – fuzzygoat 2010-03-19 16:31:20

回答

2

就個人而言,我會使用的NSXMLParser讓你在的地方,以防有一切你想提取XML文件的詳細信息。

2

您應該始終使用XML解析器解析XML。訂購和其他事情不會保證最終會破壞您的代碼。使用真正的XML解析器解析是確保代碼在輸入更改時不會中斷的唯一方法。

+0

對於簡單的數據,我不認爲您需要使用XML解析器。是的,在某些情況下,您可以通過使用合適的解析器來保護自己不必重寫代碼,但提供的數據文件似乎不是一個明顯的例子。首先,它沒有模式或線索,以確定數據結構是否會隨着版本號的變化而變化。在我看來,即使在XML解析器和類似於正則表達式庫或NSScanner之類的東西之間,提交更改時不得不重寫代碼的機會也是如此。 – VictorB 2010-03-19 15:13:14

0

對於這樣簡單的數據任務,我用RegexKitLite這是iPhone的輕量的正則表達式庫。基本實現可能是這樣的(假設你的文件的內容是NSString *XMLString

NSString *regex = @"<data\\s+version=\"(\\d+\\.\\d+)\">([^<]+)<\\/data>"; 
NSArray *components = [XMLString arrayOfComponentsMatchingRegex:regex]; 
if (components.count == 3) { 
    // [components objectAtIndex:0] contains the full match 
    // [components objectAtIndex:1] contains the version number 
    // [components objectAtIndex:2] contains the contents of the data tag 
    //        (including leading/trailing whitespace) 
}