gpt4 book ai didi

XML 的 C# LINQ 左外连接无法正常工作

转载 作者:太空宇宙 更新时间:2023-11-03 13:02:40 25 4
gpt4 key购买 nike

我正在尝试为两个 XML 执行 Left Outer Join 并获取另一个 XML(不是集合!)作为输出,但是 LINQ 的查询“into”似乎只提取值但是不是具有所有原始标签和属性的完整元素。

我的 xml1 看起来像这样:

<tag>
<abc id="zxy">tiger</abc>
<abc id="zzz">rabbit</abc>
</tag>

我的xml2:

<tag>
<aaa attr1="1" attr2="zzz">value1</aaa>
<aaa attr1="2" attr2="zxc">value2</aaa>
</tag>

我的 C# 代码:

var que= from first in xml1
join second in xml2
on (string)first.Attribute(attr1) equals (string)second.Attribute(attr2) into temp
from tmpL in temp.DefaultIfEmpty()
orderby (string)first.Attribute(attr1)//, (string)tmpL.Attribute(attr2) -- this one isn't working because it's not an element
select new XElement("child", first, tmpL == null ? String.Empty : (string)tmpL);

var final= new XDocument(new XElement("parent", que));

这就是我使用该代码连接上面两个 XML 的结果:

<parent>
<child>
<abc id="zxy">tiger</abc>value1</child>
<child>
<abc id="zzz">rabbit</abc>value2</child>
</parent>

如您所见,这是一个无效的 XML,其中 value1 和 value2 粘附在同级元素上,而它们应该包装在自己的原始标签中(具有原始属性):<aaa attr1="1" attr2="zzz">value1</aaa><aaa attr1="2" attr2="zxc">value2</aaa>相应地。

因此我不能对它们使用 .Attribute() 和其他东西。此外,我不能只将这些值插入到新创建的元素中,因为我需要 xml2 中原始元素的属性。

你能帮我获取以下 XML 吗?

<parent>
<child>
<abc id="zxy">tiger</abc>
<aaa attr1="1" attr2="zzz">value1</aaa>
</child>
<child>
<abc id="zzz">rabbit</abc>
<aaa attr1="2" attr2="zxc">value2</aaa>
</child>
</parent>

最佳答案

"..but LINQ's query 'into' seems to be extracting only values but not full elements with all the original tags and attributes"

您实际上按预期获得了 XElement,但随后它被显式转换为 string,这导致仅保留字符串值,此处:

select new XElement("child", first, tmpL == null ? String.Empty : (string)tmpL);

当您不想让任何东西成为新创建的 child 元素的子元素时,移除强制转换并简单地传递 null 而不是 String.Empty :

select new XElement("child", first, tmpL == null ? null : tmpL);

或者简单地传递 tmpL,无论它是否为 null,这会产生一个等效但更清晰的语句:

select new XElement("child", first, tmpL);

关于XML 的 C# LINQ 左外连接无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31893046/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com