Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/256.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#_Xml_Linq - Fatal编程技术网

C# 返回不在其他XML中的元素

C# 返回不在其他XML中的元素,c#,xml,linq,C#,Xml,Linq,我有两个像素。每个包含多个子元素 乙二醇 Xml1: 但是,它返回Xml1中的所有值 我是否认为我可以通过一个查询来实现这一点,或者我必须从两个查询中获得结果,然后迭代它们以获得Xml1中不在Xml2中的地址 任何帮助都将不胜感激:)您需要执行一个子查询(返回Xml1中位于Xml2中的所有元素),然后查找Xml1中不在子查询中的所有元素。您可以通过一些匿名查询简化工作: var addresses2 = from xaddr in x2.Root.Elements("Address")

我有两个像素。每个包含多个子元素

乙二醇

Xml1:

但是,它返回Xml1中的所有值 我是否认为我可以通过一个查询来实现这一点,或者我必须从两个查询中获得结果,然后迭代它们以获得Xml1中不在Xml2中的地址


任何帮助都将不胜感激:)

您需要执行一个子查询(返回Xml1中位于Xml2中的所有元素),然后查找Xml1中不在子查询中的所有元素。

您可以通过一些匿名查询简化工作:

var addresses2 = from xaddr in x2.Root.Elements("Address")
                 let a = new
                         {
                             Line1 = xaddr.Element("Line1").Value,
                             PostalCode = xaddr.Element("Postcode").Value
                         }
                 select a;

// take the addresses in the first XML which are found in the second XML
// nota bene: this is case sensitive.
var addresses = (from xaddr in x1.Root.Elements("Address")
                 let a = new
                         {
                             Line1 = xaddr.Element("Line1").Value,
                             PostalCode = xaddr.Element("Postcode").Value
                         }
                 select a)
                .Intersect(addresses2);

谢谢你的信息,保罗

下面是使用“Exception”操作符适合我的解决方案的代码

var newAddresses=Xml1.substands(“地址”).Cast()
.除了(Xml2.substands(“Address”).Cast(),新的XNodeEqualityComparer());

看看LINQ'Except'运算符。如果出现了错误的
|
和/或错误的
位置,请不要认为您的代码当前已编译。
@paul:我相信他会希望
交叉
@paul这是一个值得注意的问题。
<Addresses>
  <Address>
   <Line1>1 Street</Line1>
   <Postcode>PL1 5RT</Postcode>
  </Address>
  <Address>
   <Line1>2 Street</Line1>
   <Postcode>PL1 5RT</Postcode>
  </Address>
</Addresses>
var diffAddress = from address1 in Xml1.Elements()
                  from address2 in Xml2.Elements()
                  where (string)address1.Element("Line1") != (string)address2.Element("Line1") || 
                  where (string)address1.Element("Postcode") != (string)address2.Element("Postcode")
                  select address1;
var addresses2 = from xaddr in x2.Root.Elements("Address")
                 let a = new
                         {
                             Line1 = xaddr.Element("Line1").Value,
                             PostalCode = xaddr.Element("Postcode").Value
                         }
                 select a;

// take the addresses in the first XML which are found in the second XML
// nota bene: this is case sensitive.
var addresses = (from xaddr in x1.Root.Elements("Address")
                 let a = new
                         {
                             Line1 = xaddr.Element("Line1").Value,
                             PostalCode = xaddr.Element("Postcode").Value
                         }
                 select a)
                .Intersect(addresses2);
    var newAddresses= Xml1.Descendants("Address").Cast<XNode>()
                      .Except(Xml2.Descendants("Address").Cast<XNode>(), new XNodeEqualityComparer());