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