如何在Mac上使用NSXML循环节点并更改每个节点的文本值

问题描述:

现在已停留多日 - 我如何循环XML文档中的每个节点并更改节点的文本值。如何在Mac上使用NSXML循环节点并更改每个节点的文本值

例如从这个去:

<root> 
    <node1>some text</node1> 
    <node2> 
     <node3>some more text</node3> 
    </node2> 
</root> 

喜欢的东西:

<root> 
    <node1>updated text</node1> 
    <node2> 
    <node3>updated text</node3> 
    </node2> 
</root> 

我不工作的代码是:

NSArray *nodes = [xmlDoc nodesForXPath:@"//*"]; 

for (NSXMLElement *node in nodes) { 
    //In time a function call will go here to change the text: 
    NSString *newVal = @"updated text"; 
    [node setStringValue:newVal]; 
} 

虽然它似乎循环确定当我检查XMLDoc的内容时,它有这个内容:

<root> 
    updated text 
</root> 

请帮助,如果你可以我已经尝试过重复谷歌搜索,并拉我(已经稀疏)的头发 - 当然这应该是相当简单的?!

Matt。

这是您的xpath表达式。 //*选择包含根节点的文档中的所有节点。所以在迭代过程中的某个时刻,你需要设置根节点的字符串值,该节点显然会清除其之前的所有子节点。

我不是XPath的专家,但这样的:

/root//* 

可能会做,只是节点3的伎俩将得到一扫而光出于同样的原因。如果你通过The XPath tutorial查看,应该有一种方法可以选择所有文本节点。

+0

谢谢杰里米 - 我会给它一个去和结果的结果。 – ar77 2010-05-26 10:33:44