gpt4 book ai didi

c# - Linq to XML 比较字符串

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

我正在尝试编写一段代码来接收一个字符串,使用该字符串中的数据对另一个字符串进行更改,然后保存另一个字符串

我更愿意使用 linq 来执行此操作,因为我对它有点熟悉,尽管这并不是说我完全没有想法。

无论如何,接收到的字符串是这样的形式

"<?xml version=\"1.0\" encoding=\"utf-8\"?><Root><Value><Code>AAA</Code><Description>First description</Description><Bool>Y</Bool></Value><Value><Code>BBB</Code><Description>Second description</Description><Bool>Y</Bool></Value><Value><Code>CCC</Code><Description>Third description</Description><Bool>N</Bool></Value></Root>";

或使用适当的格式

    "<?xml version=\"1.0\" encoding=\"utf-8\"?>
<Root>
<Value>
<Code>AAA</Code>
<Description>First description</Description>
<Bool>Y</Bool>
</Value>
<Value>
<Code>BBB</Code>
<Description>Second description</Description>
<Bool>Y</Bool>
</Value>
<Value>
<Code>CCC</Code>
<Description>Third description</Description>
<Bool>N</Bool>
</Value>
</Root>"

例如。另一个值就像

    "<?xml version=\"1.0\" encoding=\"utf-8\"?>
<Root>
<Value>
<Code>111</Code>
<Description>111 description</Description>
<Bool>Y</Bool>
</Value>
<Value>
<Code>AAA</Code>
<Description>First description</Description>
<Bool>Y</Bool>
</Value>
<Value>
<Code>222</Code>
<Description>222 description</Description>
<Bool>Y</Bool>
</Value>
<Value>
<Code>BBB</Code>
<Description>Second description</Description>
<Bool>Y</Bool>
</Value>
<Value>
<Code>333</Code>
<Description>333 description</Description>
<Bool>Y</Bool>
</Value>
<Value>
<Code>CCC</Code>
<Description>Third description</Description>
<Bool>Y</Bool>
</Value>
</Root>"

所以具有相同的形式,但具有更多的值,并且所有 bool 值都设置为 Y。我想要做的就是找到所有代码的 bool 值设置为 N,并将新 XML 上的这些 bool 值设置为 N。

因此,将这两者结合起来的结果将是新的 xml,但带有代码 CCC 的值会将 Bool 设置为 N。因此:

    "<?xml version=\"1.0\" encoding=\"utf-8\"?>
<Root>
<Value>
<Code>111</Code>
<Description>111 description</Description>
<Bool>Y</Bool>
</Value>
<Value>
<Code>AAA</Code>
<Description>First description</Description>
<Bool>Y</Bool>
</Value>
<Value>
<Code>222</Code>
<Description>222 description</Description>
<Bool>Y</Bool>
</Value>
<Value>
<Code>BBB</Code>
<Description>Second description</Description>
<Bool>Y</Bool>
</Value>
<Value>
<Code>333</Code>
<Description>333 description</Description>
<Bool>Y</Bool>
</Value>
<Value>
<Code>CCC</Code>
<Description>Third description</Description>
<Bool>N</Bool>
</Value>
</Root>"

对我来说,似乎应该有一种非常简单的方法可以使用 Linq to XML 来完成这项工作,但我已经研究了一段时间,而且我对 XML 的经验似乎很缺乏,因为我有相当多的经验这有点麻烦。

如有任何帮助,我们将不胜感激。

谢谢

最佳答案

类似的东西?

using System.Linq;
using System.Xml.Linq;

namespace ConsoleApplication1
{
class Program
{
static XElement Join(XElement xmlOne, XElement xmlTwo)
{
return new XElement(
"Root",
xmlOne.Elements("Value").Concat(xmlTwo.Elements("Value")).GroupBy(element => element.Element("Code").Value).Select(
group =>
new XElement("Value",
new XElement("Code", group.First().Element("Code").Value),
new XElement("Description", group.First().Element("Description").Value),
new XElement("Bool", group.Any(elem => elem.Element("Bool").Value == "N") ? "N" : "Y"))).ToArray());

}

static void Main(string[] args)
{
var xmlOne = XElement.Parse("<?xml version=\"1.0\" encoding=\"utf-8\"?> <Root> <Value> <Code>AAA</Code> <Description>First description</Description> <Bool>Y</Bool> </Value> <Value> <Code>BBB</Code> <Description>Second description</Description> <Bool>Y</Bool> </Value> <Value> <Code>CCC</Code> <Description>Third description</Description> <Bool>N</Bool> </Value> </Root>");
var xmlTwo = XElement.Parse("<?xml version=\"1.0\" encoding=\"utf-8\"?> <Root> <Value> <Code>111</Code> <Description>111 description</Description> <Bool>Y</Bool> </Value> <Value> <Code>AAA</Code> <Description>First description</Description> <Bool>Y</Bool> </Value> <Value> <Code>222</Code> <Description>222 description</Description> <Bool>Y</Bool> </Value> <Value> <Code>BBB</Code> <Description>Second description</Description> <Bool>Y</Bool> </Value> <Value> <Code>333</Code> <Description>333 description</Description> <Bool>Y</Bool> </Value> <Value> <Code>CCC</Code> <Description>Third description</Description> <Bool>Y</Bool> </Value> </Root>");
var result = Join(xmlOne, xmlTwo);
}
}
}

关于c# - Linq to XML 比较字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9109260/

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