一对多 Linq to XML 查询

发布于 2024-09-16 01:29:33 字数 1396 浏览 4 评论 0原文

我有一个看起来像这样的 XML 字符串:

<Attributes>
    <ProductAttribute id="1">
        <ProductAttributeValue>
            <Value>a</Value>
        </ProductAttributeValue>
    </ProductAttribute>
    <ProductAttribute id="2">
        <ProductAttributeValue>
            <Value>a</Value>
        </ProductAttributeValue>
        <ProductAttributeValue>
            <Value>b</Value>
        </ProductAttributeValue>
    </ProductAttribute>    
</Attributes>

我想返回一个像这样的 IEnumerable:

Id Value
1  a
2  a b

我已经尝试过这个,但只得到了 Id “2” 的 “b” 值:

XElement e = XElement.Parse(xmlString);
var q = from pa in e.Elements("ProductAttribute")
from pav in pa.Elements("ProductAttributeValue").Elements("Value")
select new
{
Id = (int)pa.Attribute("id"),
Value = (string)pav
};

我尝试过这个:

 XElement e = XElement.Parse(xmlString);
    var q = from pa in e.Elements("ProductAttribute")
    select new
    {
    Id = (int)pa.Attribute("id"),
    Value = pa.Elements("ProductAttributeValue").Elements("Value")
    };

但无法将 Value 转换为字符串。使用 LINQPad 的输出如下:

Id Value
1  a
2  <Value>a</Value>
   <Value>b</Value>

我试图返回值。这可能吗?

谢谢。

I have an XML string that looks like this:

<Attributes>
    <ProductAttribute id="1">
        <ProductAttributeValue>
            <Value>a</Value>
        </ProductAttributeValue>
    </ProductAttribute>
    <ProductAttribute id="2">
        <ProductAttributeValue>
            <Value>a</Value>
        </ProductAttributeValue>
        <ProductAttributeValue>
            <Value>b</Value>
        </ProductAttributeValue>
    </ProductAttribute>    
</Attributes>

I would like to return an IEnumerable like this:

Id Value
1  a
2  a b

I have tried this and only got the "b" value for Id "2":

XElement e = XElement.Parse(xmlString);
var q = from pa in e.Elements("ProductAttribute")
from pav in pa.Elements("ProductAttributeValue").Elements("Value")
select new
{
Id = (int)pa.Attribute("id"),
Value = (string)pav
};

I tried this:

 XElement e = XElement.Parse(xmlString);
    var q = from pa in e.Elements("ProductAttribute")
    select new
    {
    Id = (int)pa.Attribute("id"),
    Value = pa.Elements("ProductAttributeValue").Elements("Value")
    };

But could not cast Value as a string. Using LINQPad the output was like this:

Id Value
1  a
2  <Value>a</Value>
   <Value>b</Value>

I am trying to just return the values. Is this even possible?

Thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

我还不会笑 2024-09-23 01:29:33

如果您想要这些值的连接字符串,例如 "a b"

 XElement e = XElement.Parse(xmlString);
    var q = from pa in e.Elements("ProductAttribute")
    select new
    {
    Id = (int)pa.Attribute("id"),
     Value = string.Join(" " ,
                    pa.Elements("ProductAttributeValue")
                     .Elements("Value")                                            
                     .Select(x=>x.Value)
                     .ToArray())
    };

If you wanted a contatenated string of those values like "a b"

 XElement e = XElement.Parse(xmlString);
    var q = from pa in e.Elements("ProductAttribute")
    select new
    {
    Id = (int)pa.Attribute("id"),
     Value = string.Join(" " ,
                    pa.Elements("ProductAttributeValue")
                     .Elements("Value")                                            
                     .Select(x=>x.Value)
                     .ToArray())
    };
遗弃M 2024-09-23 01:29:33
XElement e = XElement.Parse(xmlString); 
var q = from pa in e.Elements("ProductAttribute") 
select new 
{ 
Id = (int)pa.Attribute("id"), 
Value = from pav in pa.Elements("ProductAttributeValue").Elements("Value") select pav.Value 
}; 

当然,Value 将是一个 IEnumerable

编辑:

如果您希望输出将 Value 元素连接到一个字符串中,您可以执行以下操作:

XElement e = XElement.Parse(xmlString); 
var q = from pa in e.Elements("ProductAttribute") 
select new 
{ 
Id = (int)pa.Attribute("id"), 
Value = string.Join(" ", (from pav in pa.Elements("ProductAttributeValue").Elements("Value")
        select pav.Value).ToArray())
};

那么输出将为:

Id Value
1  a 
2  a b
XElement e = XElement.Parse(xmlString); 
var q = from pa in e.Elements("ProductAttribute") 
select new 
{ 
Id = (int)pa.Attribute("id"), 
Value = from pav in pa.Elements("ProductAttributeValue").Elements("Value") select pav.Value 
}; 

Of course, Value will be an IEnumerable<string>.

Edit:

If you want the output to concat the Value elements into one string you can do this:

XElement e = XElement.Parse(xmlString); 
var q = from pa in e.Elements("ProductAttribute") 
select new 
{ 
Id = (int)pa.Attribute("id"), 
Value = string.Join(" ", (from pav in pa.Elements("ProductAttributeValue").Elements("Value")
        select pav.Value).ToArray())
};

Then the output will be:

Id Value
1  a 
2  a b
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文