C# 如何使用xmldocument获取最新的节点详细信息?
我有如下xml文件C# 如何使用xmldocument获取最新的节点详细信息?,c#,xml,xmldocument,C#,Xml,Xmldocument,我有如下xml文件 <Root> <Main Name="Install"> <Details>Success</Details> <Maintain>Install period</Maintain> </Main> <Main Name="Uninstall"> <Details>failure</D
<Root>
<Main Name="Install">
<Details>Success</Details>
<Maintain>Install period</Maintain>
</Main>
<Main Name="Uninstall">
<Details>failure</Details>
<Maintain>uninstall period</Maintain>
</Main>
<Main Name="Discard">
<Details>failure</Details>
<Maintain>discard period</Maintain>
</Main>
<Main Name="Install">
<Details>Done</Details>
<Maintain>Got Output</Maintain>
</Main>
</Root>
结果如下:
<Root>
<Main Name="Uninstall">
<Details>failure</Details>
<Maintain>uninstall period</Maintain>
</Main>
<Main Name="Discard">
<Details>failure</Details>
<Maintain>discard period</Maintain>
</Main>
<Main Name="Install">
<Details>Done</Details>
<Maintain>Got Output</Maintain>
</Main>
</Root>
失败
卸载期
失败
废弃期
多恩
得到输出
但是,是否可以通过xmldocument(使用system.xml)获取此输出来代替使用xdocument?我只需要xmldocument输出 您可以手动操作。只需从头到尾遍历
Main
元素,删除已满足Name
属性的所有项
var document = new XmlDocument();
document.LoadXml(xmlString);
Dictionary<string, bool> used = new Dictionary<string, bool>();
var allNodes = document.SelectNodes("Root/Main");
for (int i = allNodes.Count - 1; i >= 0; i--)
{
var name = ((XmlElement)allNodes[i]).GetAttribute("Name");
if (used.ContainsKey(name))
{
allNodes[i].ParentNode.RemoveChild(allNodes[i]);
}
else
{
used.Add(name, true);
}
}
Console.WriteLine(document.OuterXml);
var document=new XmlDocument();
document.LoadXml(xmlString);
使用的字典=新字典();
var allNodes=document.SelectNodes(“根/主”);
对于(int i=allNodes.Count-1;i>=0;i--)
{
var name=((xmlement)allNodes[i]).GetAttribute(“name”);
if(已使用。ContainsKey(名称))
{
allNodes[i].ParentNode.RemoveChild(allNodes[i]);
}
其他的
{
已使用。添加(名称,true);
}
}
Console.WriteLine(document.OuterXml);
这是工作表
然而,正如我在评论中已经提到的,使用XDocument
确实是一个好主意,因为它更方便,也更现代
var document = new XmlDocument();
document.LoadXml(xmlString);
Dictionary<string, bool> used = new Dictionary<string, bool>();
var allNodes = document.SelectNodes("Root/Main");
for (int i = allNodes.Count - 1; i >= 0; i--)
{
var name = ((XmlElement)allNodes[i]).GetAttribute("Name");
if (used.ContainsKey(name))
{
allNodes[i].ParentNode.RemoveChild(allNodes[i]);
}
else
{
used.Add(name, true);
}
}
Console.WriteLine(document.OuterXml);