我尝试将任何以“NP”开头的节点重命名为“NP”在一个XmlDocument
中。我只找到了这个相关问题。根据最受欢迎的答案,我写了以下代码:
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>
我希望能够为这个问题提供一个更加通用和优雅的解决方案。