重命名Xml节点
本文关键字:节点 Xml 重命名 | 更新日期: 2023-09-27 18:04:02
我尝试将XmlDocument
中以"NP"开头的任何节点重命名为"NP"。我只找到了这个相关的问题。根据我写的最多投票的答案:
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>
我会用LINQ to XML来做这件事,它更容易更清晰。首先,它通常是一个更好的库,其次:XElement.Name
是可变的。
var doc = XDocument.Parse(xml); // or use XDocument.Load
foreach (var element in doc.Descendants())
{
if (element.Name.LocalName.StartsWith("NP"))
{
element.Name = "NP";
}
}