2010-09-18 109 views
0

我想解析一个XML来提取某些变量的值。这里有一个例子:提取信息。从XML到可可

<?xml version='1.0'?> 
    <Main xmlns='http://www.abc.uk' version='1.0' name='full'> 
    <child1 version='2.0'> 
    <value1> xyz </value1> 
    <userinfo> 
     <name> joe </name> 
     <pass> joepass </pass> 
    </userinfo> 
    </child1> 
</Root> 

问题: 如何提取“XYZ”值显示? 我如何提取'joe'和'joepass'来显示?

从我的理解,child1是属性'版本'的根。 'value1'和'userinfo'都是元素。在Cocoa中,我将如何显示这些值?我可以做一个[child elementsForName:@“userinfo”,它显示所有的值。我需要特别提取'joe'和'joepass'。谢谢。

+0

你想以编程方式做到这一点?什么语言? – karlphillip 2010-09-18 01:09:31

+0

cocoa/objective c – ZionKing 2010-09-18 01:29:28

回答

2

如何提取'xyz'值为 display?我如何提取'joe'和 'joepass'来显示?

就像这样。这里假设你有一个在你的NSString XML:

NSXMLDocument* xmlDoc; 
NSError* error = nil; 
NSUInteger options = NSXMLNodePreserveWhitespace|NSXMLDocumentTidyXML; 
xmlDoc = [[NSXMLDocument alloc] initWithXMLString:xmlString 
              options:options 
              error:&error]; 
if (!error) 
{ 
    NSArray* value1Nodes = [xmlDoc nodesForXPath:@".//Main/value1" error:&error]; 
    if (!error) 
    { 
     NSXMLNode* value1node = [value1Nodes objectAtIndex:0]; 
     NSString* value1 = [value1node stringValue]; 
     // .. do something with value1 
    } 

    NSArray* userInfoNodes = [xmlDoc nodesForXPath:@".//Main/userinfo" error:&error]; 
    if (!error) 
    { 
     for (NSXMLNode* userInfoNode in userInfoNodes) 
     { 
      NSXMLNode* nameNode = [[userInfoNode nodesForXPath:@"./name" error:&error] objectAtIndex:0]; 
      NSXMLNode* passNode = [[userInfoNode nodesForXPath:@"./pass" error:&error] objectAtIndex:0]; 
      NSString* name = [nameNode stringValue]; 
      NSString* pass = [passNode stringValue]; 
      // .. do something with name and pass 
    } 
} 

见在苹果的Tree-Based XML Programming Guide更多细节。

从我的理解中,child1是 根,属性为'version'。 'value1'和'userinfo'都是 元素。

Main是此XML文档中的根节点,而不是child1

+0

谢谢。这非常出色。 – ZionKing 2010-09-18 08:29:10