1

抱歉这个基本问题 - 我需要一些帮助。我能够获取 XML 文档并保存它。无法让编辑工作。我想使用 textField 的内容更新“主题”标签,并在保存之前设置一个操作。我的编辑代码显然不起作用。

谢谢您的帮助。

-保罗。

 <temp>
<theme>note</theme>
 </temp>

 ///////

 NSMutableArray* temps = [[NSMutableArray alloc] initWithCapacity:10];
 NSXMLDocument *xmlDoc;
 NSError *err=nil;

 NSString *file = [input1 stringValue];

 NSURL *furl = [NSURL fileURLWithPath:file];
if (!furl) {
   NSLog(@"Unable to create URL %@.", file);
   return;
}
xmlDoc = [[NSXMLDocument alloc] initWithContentsOfURL:furl options:     (NSXMLNodePreserveWhitespace|NSXMLNodePreserveCDATA) error:&err];
 if (xmlDoc == nil) {
  xmlDoc = [[NSXMLDocument alloc] initWithContentsOfURL:furl options:NSXMLDocumentTidyXML  error:&err];
}


 NSXMLElement* root  = [xmlDoc rootElement];
 NSArray* objectElements = [root nodesForXPath:@"//temp" error:nil];
for(NSXMLElement* xmlElement in objectElements)
[temps addObject:[xmlElement stringValue]];


 NSXMLElement *themeElement = [NSXMLNode elementWithName:@"theme"];
[root addChild:themeElement];
 NSString * theTheme = [textField stringValue];
[themeElement setStringValue:theTheme];
4

1 回答 1

2

下面介绍如何更改文件中的主题元素。基本上,当您在元素上设置字符串值时,根元素会使用新值更新,因此 xmlDoc 也会更新,因为它链接到根元素。因此,您可以将其写入文件。例如,这是我开始使用的 xml 文档...

<root>
    <temp>
        <theme>first theme</theme>
        <title>first title</title>
    </temp>
    <temp>
        <theme>second theme</theme>
        <title>second title</title>
    </temp>
</root>

在这段代码中,我将“第一个主题”值更改为“更改主题”。另请注意,我的“nodesForXPath”代码直接获取主题元素。

// the xml file
NSString* file = [NSHomeDirectory() stringByAppendingPathComponent:@"Desktop/a.xml"];
NSURL *furl = [NSURL fileURLWithPath:file];

// get the xml document
NSError* err = nil;
NSXMLDocument* xmlDoc = [[NSXMLDocument alloc] initWithContentsOfURL:furl options:(NSXMLNodePreserveWhitespace | NSXMLNodePreserveCDATA) error:&err];
if (err) {
    NSLog(@"There was an error reading the xml document.");
    return 0;
}
NSXMLElement* root  = [xmlDoc rootElement];

// look for the <theme> tags
NSArray* themeElements = [root nodesForXPath:@"//theme" error:nil];

// change a specific theme tag value
for(NSXMLElement* themeElement in themeElements) {
    if ([[themeElement stringValue] isEqualToString:@"first theme"]) {
        [themeElement setStringValue:@"changed theme"];
    }
}

// write xmlDoc to file
NSData* xmlData = [xmlDoc XMLDataWithOptions:NSXMLNodePrettyPrint];
if (![xmlData writeToURL:furl atomically:YES]) {
    NSLog(@"Could not write document out...");
}

[xmlDoc release];
于 2012-12-08T00:45:07.213 回答