使用TBXML访问XML中的数据?

时间:2010-12-10 22:29:58

标签: iphone objective-c xml

在我的iPhone应用程序中,我需要在xml文件中获取数据。我正在使用TBXML来做到这一点。

以下是我需要从中获取数据的xml(简化版):

<ResultSet version="1.0">
    <Result>
        <woeid>12792023</woeid>
    </Result>
</ResultSet>

我需要将woeid中的数据放入NSString中。

我对XML仍然很陌生,而且我很困惑。这是我试图访问它的方式。

//locationString is a NSString containing a URL of a XML file
TBXML * XML = [[TBXML tbxmlWithURL:[NSURL URLWithString:locationString]] retain];
TBXMLElement * rootXML = XML.rootXMLElement;
NSString *WOEID = [TBXML textForElement:[TBXML childElementNamed:@"Result" parentElement:rootXML]];

它无法正常工作,所以我假设我做错了。有什么建议吗?

提前致谢!

-------------------------------------------- -------------------------------------------------- ----------------------

完整的XML文件在这里:

-<ResultSet version="1.0">
   <Error>0</Error>
   <ErrorMessage>No error</ErrorMessage>
   <Locale>us_US</Locale>
   <Quality>99</Quality>
   <Found>1</Found>
     −<Result>
      <quality>72</quality>
      <latitude>xxxxxxxx</latitude>
      <longitude>xxxxxxxxx</longitude>
      <offsetlat>xxxxxxxx</offsetlat>
      <offsetlon>xxxxxxxxx</offsetlon>
      <radius>500</radius>
      <name>xxxxxxxx,xxxxxxx</name>
      <line1>xxxxx xxx</line1>
      <line2>xxxx, xx  xxxxx</line2>
      <line3/>
      <line4>United States</line4>
      <house/>
      <street>xxxx xxx</street>
      <xstreet/>
      <unittype/>
      <unit/>
      <postal>11111</postal>
      <neighborhood/>
      <city>xxxxxxx</city>
      <county>xxxxxxx</county>
      <state>xxxxxx</state>
      <country>United States</country>
      <countrycode>US</countrycode>
      <statecode>TX</statecode>
      <countycode/>
      <hash/>
      <woeid>11111111</woeid>
      <woetype>11</woetype>
      <uzip>xxxxx</uzip>
   </Result>
</ResultSet>

2 个答案:

答案 0 :(得分:1)

TBXMLElement *rootXML = XML.rootXMLElement;
TBXMLElement *e = [TBXML childElementNamed:@"Result" parentElement:rootXML];
NSString *woeid = [TBXML textForElement:e->firstChild];

childElementNamed返回您命名的元素,因此在本例中为“Result”。您需要此元素的的内容

答案 1 :(得分:1)

答案与托马斯的答案相似,所以我会保留他的正确理由,因为他帮助我来到这里。因为woeid嵌套在XML中,所以你必须这样做:

TBXMLElement *rootXML = XML.rootXMLElement;
TBXMLElement *results = [TBXML childElementNamed:@"Result" parentElement:rootXML];  
TBXMLElement *WOEID = [TBXML childElementNamed:@"woeid" parentElement:results]; 
NSString *woeid = [TBXML textForElement:WOEID];