我怀疑使用LINQ to XML可以很容易地解决我的问题,但我对它很新,而且似乎遇到了问题。 (另外,我找不到一个体面的教程,涵盖了我的类似案例,所以如果你能指出我的任何东西,我们非常感谢!)
我需要做的是:
我有一个我必须阅读的XML文件,您可以在下面找到它。文件中通常只有一个分支,其中包含多个订单。每个订单都有一个唯一的代码。这些订单包含多个参数,每个参数都有一个唯一的代码。
我获得了订单代码和参数代码,现在我必须找到正确的顺序,并在该顺序中找到正确的参数。
对于这个参数,我需要更新“numericalValue”和“stringValue”字段。
这对我来说很难:因为上面提到的两个条件,看起来我必须要引入两个中间变量,每个变量在 where
中都有一个条件子句,第二个构建在第一个。
然后我必须将整个XML文件写回磁盘,现在包含我的两个小改动。 使用我上面描述的中间变量,将整个事物再次放在一起对我来说就像是一条特别棘手的道路。
所以这是我的XML文件:
<xyz version="1.2.3"
xmlns="http://www.mycompany.com/xyz"
xmlns:abc="http://www.mycompany.com/xyz/abc">
<header>
<!-- some unimportant stuff -->
</header>
<body>
<abc:abc version="1.3">
<abc:branches>
<abc:branch>
<!-- some unimportant stuff -->
<abc:orders>
<abc:order>
check this-> <abc:orderCode>FOO</abc:orderCode>
<abc:orderParameters>
<abc:orderParameter>
and this-> <abc:parameterCode>BAR</abc:parameterCode>
<abc:billedValue>
<abc:value>
then change -> <abc:numericalValue>10</abc:numericalValue>
these two -> <abc:stringValue>ten</abc:stringValue>
</abc:value>
</abc:billedValue>
</abc:orderParameter>
<abc:orderParameter>
<!-- similar contents -->
</abc:orderParameter>
<!-- some more orderParameter instances -->
</abc:orderParameters>
</abc:order>
<abc:order>
<!-- similar contents as above -->
</abc:order>
<!-- some more order instances here -->
</abc:orders>
</abc:branch>
</abc:branches>
</abc:abc>
</body>
</xyz>
正如我所说,我怀疑解决方案很简单,但我现在似乎无法弄明白(尤其是我必须把整个事情写回来的部分)。
答案 0 :(得分:2)
假设确保具有该订单代码的元素和您正在寻找的参数代码存在,下面的代码片段应该给您一个想法:
string orderCode = "FOO";
string paramCode = "BAR";
XDocument doc = XDocument.Load("file.xml");
XNamespace abc = "http://www.mycompany.com/xyz/abc";
XElement value =
doc
.Descendants(abc + "order")
.First(o => o.Element(abc + "orderCode").Value == orderCode)
.Descendants(abc + "orderParameter")
.First(p => p.Element(abc + "parameterCode").Value == paramCode)
.Element(abc + "billedValue")
.Element(abc + "value");
value.SetElementValue(abc + "numericalValue", 20);
value.SetElementValue(abc + "stringValue", "twenty");
doc.Save(Console.Out); // do doc.Save("file.xml") to overwrite
答案 1 :(得分:0)
Jan - 你应该看看this post。它包括查询和保存 - 这两个你对LINQ-to-XML感兴趣的项目。