0

我正在尝试解析 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”。谢谢。

4

1 回答 1

2

如何提取“xyz”值来显示?如何提取“joe”和“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 的基于树的 XML 编程指南中查看更多详细信息。

据我了解,child1 是具有“版本”属性的根。'value1' 和 'userinfo' 都是元素。

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

于 2010-09-18T04:55:57.390 回答