gpt4 book ai didi

c# - 从关联的属性值中获取 xml 属性值

转载 作者:太空宇宙 更新时间:2023-11-03 23:27:47 31 4
gpt4 key购买 nike

this问题我发现了如何使用

XDocument MyData = XDocument.Load(FILENAME);
string color = MyData.Descendants("Red").Elements("Shade")
.Where(y => (int)y.Attribute("id") == 3).FirstOrDefault().Value;

通过指定属性“id”来获取元素。上面从下面的 Xml 返回“熔岩”。

 <colours>
<Red>
<Shade id="1">
<colour>crimson</colour>
</Shade>
<Shade id="2">
<colour>raspberry</colour>
</Shade>
<Shade id="3">
<colour>lava</colour>
</Shade>
<Shade id="4">
<colour>scarlet</colour>
</Shade>
</Red>
<Green>
<Shade id="1">
<colour>asparagus</colour>
</Shade>
<Shade id="2">
<colour>emerald</colour>
</Shade>
<Shade id="3">
<colour>lime</colour>
</Shade>
<Shade id="4">
<colour>avocado</colour>
</Shade>
</Green>
<Blue>
<Shade id="1">
<colour>cyan</colour>
</Shade>
<Shade id="2">
<colour>sapphire</colour>
</Shade>
<Shade id="3">
<colour>powder</colour>
</Shade>
<Shade id="4">
<colour>iris</colour>
</Shade>
</Blue>
</colours>

在下面的示例中,我的 Shade 元素有一个名为“group”的额外属性(为了保持简短,我只是将它们添加到“Red”中。我需要做一些与之前类似的事情,只是这次我不想搜索“id”并返回其“颜色”,而是想搜索“id”并返回其“组”值。

一个解决方案是将“组”从一个属性更改为一个元素,这使得将 Linq to Xml 调整到上面更加直接,但我很想知道现有 Xml 的解决方案会是什么样子。

我也很想了解更多有关 Linq to Xml 和像这样使用 Lambda 表达式的信息。您可以向我指出任何好的学习资源,我们将不胜感激。

 <colours>
<Red>
<Shade id="1" group="yes">
<colour>crimson</colour>
</Shade>
<Shade id="2" group="no">
<colour>raspberry</colour>
</Shade>
<Shade id="3" group="yes">
<colour>lava</colour>
</Shade>
<Shade id="4" group="no">
<colour>scarlet</colour>
</Shade>
</Red>
<Green>
<Shade id="1">
<colour>asparagus</colour>
</Shade>
<Shade id="2">
<colour>emerald</colour>
</Shade>
<Shade id="3">
<colour>lime</colour>
</Shade>
<Shade id="4">
<colour>avocado</colour>
</Shade>
</Green>
<Blue>
<Shade id="1">
<colour>cyan</colour>
</Shade>
<Shade id="2">
<colour>sapphire</colour>
</Shade>
<Shade id="3">
<colour>powder</colour>
</Shade>
<Shade id="4">
<colour>iris</colour>
</Shade>
</Blue>
</colours>

最佳答案

由于 group 是一个属性,您可以像这样使用 .Attribute 方法:-

var colors = MyData.Root.Element("Red")
.Elements("Shade")
.FirstOrDefault(y => (int)y.Attribute("id") == 3);
string group;
if (colors != null)
group = (string)colors.Attribute("group");

描述:

我们需要从根节点开始,所以 MyData.Root 会给出 colours 这是根节点,然后我们需要选择 Red 元素,因为我们没有多个 Red 节点,所以在这里使用 Descendants 没有意义。现在在 Red 节点中,我们可以使用 Elements 方法来获取所有 Shade 节点。 (为什么我们在这里不使用 Descendants?检查 difference between them。)最后我们使用 FirstOrDefault 方法来获取具有 id 属性的第一个节点作为 3。如果没有节点满足条件,它将返回 null,这就是我们首先检查它是否返回 null 然后获取 group 属性的原因,否则它将抛出 Null 引用异常。

关于c# - 从关联的属性值中获取 xml 属性值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33296939/

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