2

我有一个这样的 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>

只删除了名称属性,我也想删除数据库标签。

需要的正确结果是:

<DataBases>
  <DataBase Name="725" />
</DataBases>

我怎样才能做到这一点?

4

5 回答 5

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>
于 2013-05-22T10:17:17.490 回答
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);
于 2013-05-22T11:42:52.527 回答
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();
于 2013-05-22T10:17:35.210 回答
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);
于 2013-05-22T10:19:26.060 回答
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);
于 2013-06-07T09:44:06.743 回答