【发布时间】:2017-01-02 00:13:20
【问题描述】:
我尝试将XmlDocument 中以“NP”开头的任何节点重命名为“NP”。我只找到this related questoin。基于我写的投票最多的答案:
XmlNodeList npNodeList = PSbank.SelectNodes("//*[starts-with(name(), 'NP')]");
foreach (XmlNode npNode in npNodeList)
{
// create new (renamed) Content node
XmlNode newNode = PSbank.CreateElement("NP");
// [if needed] copy existing Content children
newNode.InnerXml = npNode.InnerXml;
// replace existing Content node with newly renamed Content node
npNode.ParentNode.InsertBefore(newNode, npNode);
npNode.ParentNode.RemoveChild(npNode);
}
但是,它似乎不适用于我的情况。当NPX 节点包含其他NPX 节点时,内部节点不会被替换,因为代码操纵XmlDocument 并将外部节点替换为包含旧innerXml 的新创建节点。
示例 Xml:
<S>
<NPC>
<NP> A </NP>
<NPA> B </NPA>
</NPC>
<NPD>
C
</NPD>
</S>
我为此类问题寻找更通用、更优雅的答案。
【问题讨论】:
-
提供一些xml例子,谢谢。