抱歉这个基本问题 - 我需要一些帮助。我能够获取XML文档并保存它。无法进行编辑工作。我想使用textField的内容更新“theme”标签,并在保存之前使用操作进行设置。我的编辑代码显然不起作用。
感谢您的帮助。
-Paul。
<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];
答案 0 :(得分:2)
以下是如何更改文件中的主题元素。基本上,当您对元素设置了StringSalue时,根元素会使用新值进行更新,因此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];