首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >XCODE NSXML更改元素值

XCODE NSXML更改元素值
EN

Stack Overflow用户
提问于 2013-06-20 08:25:54
回答 3查看 1.2K关注 0票数 1

我有一个非常简单的xml文件,名为options.xml。

代码语言:javascript
复制
<Dat>
    <Name>Tom</Name>
    <Option>1</Option>
</Dat>

使用NSXML,我尝试将"Tom“更改为"Jim”并保存文件。我怎么能做到这一点。我阅读了很多文档,但没有直接的解决方案。有人能帮我写代码吗?

更新:我最终尝试使用Gdatasxml

代码语言:javascript
复制
 -(void)saveToXML
{
NSString* path = [[NSBundle mainBundle] pathForResource:@"options" ofType:@"xml"];

NSData *xmlData = [[NSMutableData alloc] initWithContentsOfFile:path];
NSError *error;
GDataXMLDocument *doc = [[GDataXMLDocument alloc] initWithData:xmlData options:0 error:&error];

GDataXMLElement *rootElement = [GDataXMLElement elementWithName:@"Dat"];

NSArray *mySettings = [doc.rootElement elementsForName:@"Dat"];

for (GDataXMLElement *mySet in mySettings)
{
    NSString *name;
    NSArray *names = [mySet elementsForName:@"Name"];
    if (names.count > 0)
    {
        GDataXMLElement *childElement = (GDataXMLElement *) [names objectAtIndex:0];
        name = childElement.stringValue;
        NSLog(childElement.stringValue);
        [childElement setStringValue:@"Jim"];
    } 
}

[xmlData writeToFile:path atomically:YES];


}

但这并不是在保存数据。帮助。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-06-20 11:39:16

在iOS中编辑XML有点困难。您需要将原始xml解析为模型,然后形成xml。

您可以利用第三方库,如GDataXML,从数据源中形成XML。

代码语言:javascript
复制
//Edited user info saved in a dictionary
NSDictionary *dictionary = @{@"Name": @"Jim", @"Option":@"1"};

GDataXMLElement *rootElement = [GDataXMLElement elementWithName:@"Dat"];
[dictionary enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
    GDataXMLElement *element = [GDataXMLElement elementWithName:key stringValue:obj];
    [rootElement addChild:element];
}];
//xml document is formed
GDataXMLDocument *document = [[GDataXMLDocument alloc]
                              initWithRootElement:rootElement];
NSData *xmlData = document.XMLData;

NSString *filePath = [self savedXMLPath];
//XML Data is written back to a filePath
[xmlData writeToFile:filePath atomically:YES];
票数 2
EN

Stack Overflow用户

发布于 2013-06-20 10:37:00

创建一个本质上是XML“节点”的类。然后,在解析器中,以与读取XML节点相同的方式设置这些XML节点系统。然后在正文中搜索并找到您想要更改的元素。改变它。然后编写一个函数,该函数遍历这些“节点”对象,以XML格式编写一个新的NSString,并将该字符串保存到文件中。据我所知,没有一种真正简单的方法来编写XML文件。我确信有人有一个库可以做这件事,但是我有非常复杂的XML需要处理,所以我编写了自己的库。如果你想要具体的代码,让我知道,我可以尝试给你你可能需要的一部分。

票数 1
EN

Stack Overflow用户

发布于 2013-06-20 18:14:39

您可以使用GDATAXML更改XML节点,此处是工作代码片段

代码语言:javascript
复制
NSString *XMLString = @"<Dat><Name>Tom</Name><Option>1</Option></Dat>";
NSError *error = nil;
GDataXMLElement *newElement = [[GDataXMLElement alloc] initWithXMLString: XMLString error: &error];
NSLog(@"New element: %@ error: %@", newElement, error);
if(nil == error)
{
    GDataXMLElement *childElement = [[newElement elementsForName: @"Name"] objectAtIndex: 0];
    [childElement setStringValue:@"Jim"];

    childElement = [[newElement elementsForName: @"Option"] objectAtIndex: 0];

    [childElement setStringValue:@"2"];

}
NSLog(@"New element now: %@", newElement);

使用此代码片段进行检查

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17203494

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档