Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.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# 如何检查另一个节点的子节点中是否存在XML节点?_C#_Xmldocument_Xmlnode - Fatal编程技术网

C# 如何检查另一个节点的子节点中是否存在XML节点?

C# 如何检查另一个节点的子节点中是否存在XML节点?,c#,xmldocument,xmlnode,C#,Xmldocument,Xmlnode,如果另一个XmlNode不包含此节点,我想将一个XmlNode添加到另一个XmlNode(比较应基于节点名称及其内容) 我怎样才能检查这种存在parentNode.ChildNodes没有Contain方法。我认为这会起作用: private void doSomething() { XmlDocument doc = new XmlDocument(); XmlNode newNode = doc.CreateElement("name");

如果另一个
XmlNode
不包含此节点,我想将一个
XmlNode
添加到另一个
XmlNode
(比较应基于节点名称及其内容)


我怎样才能检查这种存在
parentNode.ChildNodes
没有
Contain
方法。

我认为这会起作用:

    private void doSomething() 
    {
        XmlDocument doc = new XmlDocument();
        XmlNode newNode = doc.CreateElement("name");
        newNode.InnerXml = "something";
        XmlNode parentNode = doc.GetElementsByTagName("parentName")[0]; 
            // I just stuck an index on end of above line... 
            // Note that GetElementsByTagName returns an XmlNodeList

        int huh = 0;
        foreach (XmlNode n in parentNode.ChildNodes)
        {
            // If I understood you correctly, you want these checks?
            if (n.InnerXml == newNode.InnerXml && n.Name == newNode.Name) huh++;
        }

        if (huh == 0) parentNode.AppendChild(newNode);
    }

您可以使用LINQ to XML,利用
XNode.DeepEquals
方法来比较子节点是否相等。示例可能如下所示-不会添加
duplicateChild
,但
newChild
将是:

var doc = new XDocument(
    new XElement("parent",
        new XElement("child", 1)));

var parent = doc.Descendants("parent").Single();

var duplicateChild = new XElement("child", 1);
var newChild = new XElement("child", 2);

if (!parent.Elements().Any(e => XNode.DeepEquals(e, duplicateChild)))
{
    parent.Add(duplicateChild);
}

if (!parent.Elements().Any(e => XNode.DeepEquals(e, newChild)))
{
    parent.Add(newChild);
}

这里有一个演示:

?这里需要
XmlDocument
吗?LINQ to XML会使这更简单,因为它是一个更好的API,并且碰巧有一个比较节点的
DeepEquals
方法。@Jashaszun它没有包含method@CharlesMager我需要一个类,如
System.Xml.XmlDocument
,如果您知道另一个类,我可以使用它too@CharlesMager它在哪里?我找不到这样的类或包含它的引用,我的IDE没有
System.Xml.Linq
var doc = new XDocument(
    new XElement("parent",
        new XElement("child", 1)));

var parent = doc.Descendants("parent").Single();

var duplicateChild = new XElement("child", 1);
var newChild = new XElement("child", 2);

if (!parent.Elements().Any(e => XNode.DeepEquals(e, duplicateChild)))
{
    parent.Add(duplicateChild);
}

if (!parent.Elements().Any(e => XNode.DeepEquals(e, newChild)))
{
    parent.Add(newChild);
}