gpt4 book ai didi

c# - 如何使用linq从xml中获取具有相同名称的不同值

转载 作者:太空宇宙 更新时间:2023-11-03 22:48:42 24 4
gpt4 key购买 nike

XML - 代码:

<Store>
<Products>
<Product id="PROD01">
<Title>Product 1</Title>
<Description><![CDATA[Product <b>1</b> description]]></Description>
<Image>prod01.gif</Image>
<Specs>
<Spec>Good computer</Spec>
<Spec>Good display</Spec>
<Spec>Latest version</Spec>
</Specs>
<Availability>same day</Availability>
</Product>
<Product id="PROD02">
<Title>Product 2</Title>
<Description><![CDATA[Product <b>2</b> description]]></Description>
<Image>prod01.gif</Image>
<Specs>
<Spec>Good computer</Spec>
<Spec>Soon available</Spec>
</Specs>
<Availability>next day</Availability>
</Product>
</Products>
</Store>

C# - 代码:

public List<DetailList> GetDetails()
{
DetailList d = new DetailList();
List<DetailList> DetailLists =
(from product in xdocList.Descendants("Product")
join detail in xdocDetail.Descendants("Product")
on (string)product.Attribute("id") equals (string)detail.Attribute("id")
into outerProducts
from outerProduct in outerProducts

select new DetailList
{
Detail1 = (string)product.Attribute("id"),
Detail2 = (string)product.Element("Title"),
Detail3 = (string)product.Element("Description"),
Detail4 = (string)product.Element("Image"),
Detail5 = (string)outerProduct.Elements("Specs")
Detail6 = (string)outerProduct.Element("Availability"),
Detail7 = (string)product.Element("Price"),
}).ToList();
return DetailLists;
}

输出:好的电脑好的显示器最新版本

但想要的输出是:

好电脑
显示效果不错
最新版本

对于输出,我使用了 asp:repeater。我尝试添加 < b r/> 等标签,但找不到我的错误,如何将 Spec 获取到三个不同的字符串,而不仅仅是一个字符串。如何实现?

最佳答案

我不确定你为什么要用自己加入节点,但根据你的 XML,这不是必需的。您可以像这样简单地投影元素:-

public static List<DetailList> GetDetails(XDocument xdocList)
{
DetailList d = new DetailList();
List<DetailList> DetailLists = (from product in xdocList.Descendants("Product")
select new DetailList
{
Detail1 = ((string)product.Attribute("id")),
Detail2 = ((string)product.Element("Title")),
Detail3 = ((string)product.Element("Description")),
Detail4 = ((string)product.Element("Image")),
Detail5 = product.Element("Specs")
.Elements("Spec")
.Select(x => (string)x).ToList(),
Detail6 = ((string)product.Element("Availability")),
Detail7 = ((string)product.Element("Price")),
}).ToList();
return DetailLists;
}

因为您需要单独的所有Specs,所以您应该有一个字符串集合,而不仅仅是字符串。所以属性 Detail5数据类型应该是:-

List<string> or string[]

关于c# - 如何使用linq从xml中获取具有相同名称的不同值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48661029/

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