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

ファイル内のテーマ要素を変更する方法は次のとおりです。基本的に、要素に StringValue を設定すると、ルート要素が新しい値で更新され、ルート要素にリンクされているため、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 に答える