我有这样的XML
<DataBases>
<DataBase Name="725" />
<DataBase Name="425"/>
</DataBases>
我正在尝试使用以下代码删除名称标签425。
XmlDocument document = new XmlDocument();
document.Load(fileName);
XmlNodeList nodes = document.GetElementsByTagName("DataBase");
foreach (XmlNode node in nodes)
{
foreach (XmlAttribute attribute in node.Attributes)
{
if (attribute.Value == "425")
{
node.RemoveAll();
break;
}
}
}
document.Save(fileName);
结果将是:
<DataBases>
<DataBase Name="725" />
<DataBase />
</DataBases>
只删除了Name Attribute,我也想删除DataBase Tag。
需要正确的结果是:
<DataBases>
<DataBase Name="725" />
</DataBases>
我怎么能做到这一点?
答案 0 :(得分:3)
您可以使用LINQ to XML来解析和转换xml。示例如下所示:
var xml ="<DataBases>\r\n <DataBase Name=\"725\" />\r\n <DataBase Name=\"425\"/>\r\n</DataBases>";
var root = XDocument.Parse(xml);
//removing all DataBase nodes with Name="425"
root.Descendants("DataBase")
.Where(node => node.Attribute("Name").Value == "425")
.Remove();
Console.WriteLine (root.ToString());
打印:
<DataBases>
<DataBase Name="725" />
</DataBases>
答案 1 :(得分:1)
使用LinqToXml
string xml = @"<DataBases>
<DataBase Name=""725"" />
<DataBase Name=""425""/>
</DataBases>";
var xDoc = XDocument.Parse(xml);
xDoc.Descendants("DataBase")
.First(d => (string)d.Attribute("Name") == "425")
.Remove();
string newXml = xDoc.ToString();
答案 2 :(得分:1)
XmlDocument document = new XmlDocument();
document.Load(fileName);
XmlNodeList nodes = document.GetElementsByTagName("DataBase");
foreach (XmlNode node in nodes)
{
if (node.GetAttrubute("Name") == "425")
{
node.ParentNode.RemoveChild(node);
break;
}
}
document.Save(fileName);
答案 3 :(得分:1)
在这种情况下加载XMLDocument,将字符串转换为XML和XML字符串,然后保存文件。
XmlDocument document = new XmlDocument();
document.Load(fileName);
string str = document.OuterXml;
var root = XDocument.Parse(str);
root.Descendants("DataBase").Where(node => node.Attribute("Name").Value == "425").Remove();
XmlDocument xm = new XmlDocument();
xm.LoadXml(root.ToString());
xm.Save(fileName);
答案 4 :(得分:0)
试试这个,
string fileName = "test.xml";
XmlDocument document = new XmlDocument();
document.Load("fileName");
string name = "425";
XmlNode node = document.SelectSingleNode("/DataBases/DataBase[@Name='" + name + "']");
if (node != null) node.ParentNode.RemoveChild(node);
document.Save(fileName);