<Customers>
<Customer1>
<Name>Bobby</Name>
<Age>21</Age>
<Address>Panjim</Address>
</Customer1>
<Customer2>
<Name>Peter</Name>
<Age>32</Age>
<Address>Panjim</Address>
</Customer2>
<Customer4>
<Name>Joel</Name>
<Age>32</Age>
<Address>Mapusa</Address>
</Customer4>
</Customers>
所以我想删除一个特定的元素,当我删除第一个元素,即customer1时,我想更新其他元素。我的意思是我想制作customer3,customer2和customer2,customer1。 有人可以帮助我实现这个目标吗?
答案 0 :(得分:3)
怎么样:
class Program {
static void Main(string[ ] args) {
XDocument doc = XDocument.Load("D:\\file.xml"); //example file
doc.Root.SwitchAndRemove("Customer1");
doc.Save("D:\\file.xml");
}
}
public static class Utilities {
public static void SwitchAndRemove(this XElement customers, XName name) {
var x = customers.Descendants().Where(e => e.Name == name).Select((element, index) => new { element, index }).Single();
int count = 0;
XElement temp = x.element;
foreach (XElement el in customers.Nodes()) {
if (count == x.index + 1) {
temp.RemoveAll();
temp.Add(el.Descendants().ToArray());
temp = el;
}
else
count++;
}
temp.Remove();
}
}
通过输入xml作为输入,输出如下:
<?xml version="1.0" encoding="utf-8"?>
<Customers>
<Customer1>
<Name>Peter</Name>
<Age>32</Age>
<Address>Panjim</Address>
</Customer1>
<Customer2>
<Name>Joel</Name>
<Age>32</Age>
<Address>Mapusa</Address>
</Customer2>
</Customers>
答案 1 :(得分:0)
假设您必须删除的元素是Customer1,首先您可以使用c#中提供的XML解析类(如XDocument或XmlReader)读取完整的xml文件,并写入另一个xml文件,说&#34; Temp。 XML&#34;完全跳过Customer1元素。这样我们就实现了删除部分。
在更新之后,忘记该文件是XML文件并将整个文件读取为字符串,例如&#34; xmlstring&#34;。现在使用可用的字符串数据类型替换功能来替换&#34; Customer2&#34;与&#34; Customer1&#34;然后&#34; Customer3&#34;与&#34; Customer2&#34;等等。
现在删除原始XML文件并写入字符串&#34; xmlstring&#34;将流编写器用于文件名&#34; YourFileName.xml&#34;
多数民众赞成。希望这个解决方案适合您。试试这个,如果你不能完成这个,分享你试过的代码,我们将建议如何解决。
答案 2 :(得分:0)
从您的评论中获取订单不必保留,然后您可以执行此操作
public static void RemoveCustomer(XElement customers, XElement removeThis){
var last = customeers.Elements().Last();
if(last != removeThis){
foreach(var element in removeThis.Elements()){
element.Value = last.Element(element.Name).Value;
}
}
last.Remove();
}
它有效地用最后一个替换掉了一个(除非最后一个被移除),从而消除了重命名任何其他元素的需要
答案 3 :(得分:0)
我认为您的问题不是如何以最小的努力重命名节点,而是XML文件的结构。
您说客户的订单并不重要,显然客户标签的编号也不重要,因为您想在删除时重命名标签。
所以这个结构可能会给你带来不必要的复杂性和额外的工作。
我认为您需要标记中的数字的唯一原因是识别您要删除的节点。我是对的还是还有更多的东西?如果没有,那么您可以将随机唯一标识符(如Guid)添加到您的客户数据中以删除正确的标识符。
可以省去很多麻烦。
<customers>
<customer>
<guid>07fb-877c-...</guid>
<name>Notch</name>
<age>34</age>
<address>street</address>
</customer>
<customer>
<guid>1435-435a-...</guid>
<name>Sam</name>
<age>23</age>
<address>other</address>
</customer>
<customers>