关于XML删除某节点跳出遍历的问题。
xml代码
<?xml version="1.0" encoding="shift_jis"?>
<config>
<message id="5">
<userGroup>CK</userGroup>
</message>
<message id="21">
<userGroup>CCC-WEB</userGroup>
<userName>XXMA</userName>
<userIP>192.168.100.47</userIP>
<userType>TCP</userType>
<userPath>C:\imart</userPath>
<userStatues>1</userStatues>
</message>
<message id="22">
<userGroup>CCC-WEB</userGroup>
<userName>WFDU</userName>
<userIP>192.168.100.79</userIP>
<userType>TCP</userType>
<userPath>C:\imart</userPath>
<userStatues>1</userStatues>
</message>
<message id="23">
<userGroup>CCC-WEB</userGroup>
<userName>SUNHL</userName>
<userIP>192.168.100.100</userIP>
<userType>TCP</userType>
<userPath>C:\imart</userPath>
<userStatues>1</userStatues>
</message>
<message id="24">
<userGroup>CCC-WEB</userGroup>
<userName>ZYGUO</userName>
<userIP>192.168.100.105</userIP>
<userType>TCP</userType>
<userPath>C:\imart</userPath>
<userStatues>1</userStatues>
</message>
</config>
C#代码
public static void deleteFormXML(String[] deleteNameAL)
{
XmlDocument doc = new XmlDocument();
doc.Load("D:\\Config.xml");
XmlNode root = doc.SelectSingleNode("config");
XmlNodeList nodeList = root.ChildNodes;
foreach (XmlNode xn in nodeList)
{
XmlElement xe = (XmlElement)xn;
XmlNodeList nls = xe.ChildNodes;
foreach (XmlNode xn1 in nls)
{
XmlElement xe1 = (XmlElement)xn1;
if (xe1.Name == "userName")
{
for (int i = 0; i < deleteNameAL.Length; i++)
{
if (deleteNameAL[i] != "" && xe1.InnerText == deleteNameAL[i])
{
root.RemoveChild(xe1.ParentNode);
}
}
}
}
}
doc.Save("D:\\Config.xml");
}
代码作用,删除指定的deleteNameAL中的多个用户的<message></message>节点。
当userName指定为XXMA与WFDU的时候。同时删除这两条数据。
使其变成如下格式
<?xml version="1.0" encoding="shift_jis"?>
<config>
<message id="5">
<userGroup>CK</userGroup>
</message>
<message id="23">
<userGroup>CCC-WEB</userGroup>
<userName>SUNHL</userName>
<userIP>192.168.100.100</userIP>
<userType>TCP</userType>
<userPath>C:\imart</userPath>
<userStatues>1</userStatues>
</message>
<message id="24">
<userGroup>CCC-WEB</userGroup>
<userName>ZYGUO</userName>
<userIP>192.168.100.105</userIP>
<userType>TCP</userType>
<userPath>C:\imart</userPath>
<userStatues>1</userStatues>
</message>
</config>
但是在删除的过程中。发现只能删除一条数据。当执行root.RemoveChild(xe1.ParentNode);后,发现代码会跳出对整个<config>节点的遍历。如果将该语句注释后。遍历可以正常进行。
请问有什么办法。可以对多条数据进行删除。或是可以不跳出遍历~
谢谢