运行后生成的XML 文件格式如下
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<Files version="0.1">
<File Name="kk" extension=".dwg" Location="" Guid="16634fe4-9986-4285-a3af-5c6d1cc10fec" version="0.1">
<SubFiles>
<File Name="jj" extension=".dwf" Location="\kk" Guid="d249ba4f-eeaa-4a2a-a503-00e98d7c6ef7" version="0.1">
<SubFiles>
<File Name="jj" extension=".jpg" Location="\kk" Guid="a182ace6-261e-411e-8930-17f0a65086b9" version="0.1" />
</SubFiles>
</File>
</SubFiles>
</File>
</Files>
现在我要删除XML文件中 extension=.dwf的所有行该怎么实现。
下面是本人写的代码貌似出现了问题,请高人指点,能给出源码非常的感激。
private void delete()
{
// 创建一个XmlDocument类的对象
XmlDocument xmlDoc = new XmlDocument();
// 把你想要读取的xml文档加载进来
xmlDoc.Load("xmlfile.xml");
// 读取你指定的节点
XmlNodeList xnl = xmlDoc.SelectSingleNode("SubFiles").ChildNodes;
foreach (XmlNode xn in xnl)
{
XmlElement xe = (XmlElement)xn;
if (xe.GetAttribute("Extention")==".dwf")
{
xe.RemoveAll();
}
}
xmlDoc.Save("xmlfile.xml");
}
protected void Page_Load(object sender, EventArgs e)
{
string filepath = Server.MapPath(".") + "\\XMLFile.xml";
XmlDocument document = new XmlDocument();
document.Load(filepath);
XmlNodeList list = document.GetElementsByTagName("File");
for (int i = list.Count - 1; i >= 0; i--)
{
XmlNode node = list[i];
if (node.Attributes["extension"].Value.Equals(".dwf"))
{
node.ParentNode.RemoveChild(node);
}
}
this.txt.Text = document.DocumentElement.OuterXml;
}
这样不知道行不行.~
有两处需改一下:
XmlNodeList xnl = xmlDoc.SelectSingleNode("//Files//File//SubFiles").ChildNodes;
//…………………………
if (xe.GetAttribute("extension") == ".dwf")
使用XPATH来查找具有这样属性的节点
//查找属性extension='.dwg'的所有节点
XmlNodeList xnl = xmlDoc.SelectNodes("//*[@extension='.dwg']");
//同样:查找属性extension='.dwg'的file节点 //file[@extension='.dwg']
foreach (XmlNode xn in xnl)
{
try
{
xmlDoc.RemoveChild(xn);//从XML中移除当前节点(包括子节点)
}
catch
{
//可能出现当前节点为前某个被移除节点的子节点
continue;
}
}