Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用xmldocument获取最新的节点详细信息?_C#_Xml_Xmldocument - Fatal编程技术网

C# 如何使用xmldocument获取最新的节点详细信息?

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

我有如下xml文件

<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);