gpt4 book ai didi

C#:如何在给定其父节点的兄弟节点的值的情况下更改 XAtrribute

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

我已经开始学习 C#,并且正在创建一个表单应用程序,以使用 LINQ to XML 自动执行工作中的一些数据输入。如果该元素的父元素具有具有特定值的同级元素,我想做的是更改该元素的属性。

我想更改所有 Wall 元素中 Type 元素的“rValue”属性,但 Label 值为“Garage Wall”的元素除外。我希望这些是不同的值。然而,有时车库墙不存在。

这是我要编辑的 XML 示例

<House>
<Components>
<Wall id="17">
<Label>Garage Wall</Label>
<Construction corners="3">
<Type rValue="2.6822">User specified</Type>
</Construction>
<Measurements height="2.7706" perimeter="6.5014" />
<FacingDirection code="1">
</FacingDirection>
</Wall>
</Components>
</House>

这是我目前拥有的代码,它只将更改应用到所有 Wall 元素。

public XDocument RChanger(XDocument house, decimal rValue, decimal garWallRValue)
{
string wallType = "Garage Wall";

foreach (XElement wall in house.Descendants("Wall"))
{
if (wallType == wall.Value.ToString())
{
foreach (XElement type in wall.Descendants("Type"))
{
type.SetAttributeValue("rValue", garWallRValue);
}
}
else
foreach (XElement type in wall.Descendants("Type"))
{
type.SetAttributeValue("rValue", rValue.ToString());
}
}
return house;
}

它现在的编写方式似乎即使 IF 语句有效,else 也只会覆盖该属性。我得到的结果是所有墙在 Type 元素中都具有相同的“rValue”属性。

我是初学者,所以如果我缺少需要学习的概念,我深表歉意。

编辑:我已将其用于以下各项:

string wallType = "Garage Wall";
foreach(XElement wall in house.Descendants("Wall"))
{
//Check for garage walls
foreach(XElement type in wall.Descendants("Type"))
if (wallType.Equals(wall.Element("Label").Value.ToString()))
{
//if wall is a garage wall
type.SetAttributeValue("rValue", "2.92");
}
else
{
//if wall is not a garage wall
type.SetAttributeValue("rValue", "3.080");
}
}

最佳答案

这应该可行,但是它假设每个 Wall 元素都满足一些条件:

  • 它们总是包含一个单一类型元素
  • 它们有零个或一个标签元素
public XDocument RChanger(XDocument house, decimal rValue, decimal garWallRValue)
{
string wallType = "Garage Wall";
foreach (var element in house.Descendants("Wall")) {
var type = element.Descendants("Type").Single();
if (element.Descendants("Label").SingleOrDefault()?.Value == wallType) {
// If the label of the element is not the wall type
type.SetAttributeValue("rValue", garWallRValue);
} else {
type.SetAttributeValue("rValue", rValue);
}
}
return house;
}

https://dotnetfiddle.net/Vcz3fd

关于C#:如何在给定其父节点的兄弟节点的值的情况下更改 XAtrribute,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56050372/

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