提取信息。从XML到Cocoa

时间:2010-09-18 00:14:34

标签: xml cocoa nsxml

我正在尝试解析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是具有属性'version'的根。 'value1'和'userinfo'都是元素。在Cocoa中,我如何显示这些值?我可以做一个[child elementsForName:@“userinfo”并显示所有值。我需要专门提取'joe'和'joepass'。感谢。

1 个答案:

答案 0 :(得分:2)

  

如何将'xyz'值提取到   显示?我如何提取'乔'和   'joepass'要显示?

有这样的事情。这假设您的XML包含在NSString

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
    }
}

在Apple的Tree-Based XML Programming Guide中查看更多详细信息。

  

根据我的理解,child1是   root属性'version'。   'value1'和'userinfo'都是   元件。

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