如果xmldocument中存在属性,则将其删除

时间:2011-07-08 19:54:57

标签: c# xml xmldocument

如果文档中存在属性,如何从XmlDocument中删除属性?请帮忙。我正在使用RemoveAttribute但是如何检查它是否存在。

root.RemoveAttribute(fieldName的);

谢谢..

 <?xml version="1.0" standalone="yes" ?> 
 <Record1>
  <Attribute1 Name="DataFieldName" Value="Pages" /> 
 </Record1> 

我正在尝试删除名为“DataFieldName”的属性。

2 个答案:

答案 0 :(得分:12)

不确定你想要做什么,所以这里有两个例子。

删除属性:

var doc = new System.Xml.XmlDocument();
doc.Load("somefile.xml");
var root = doc.FirstChild;

foreach (System.Xml.XmlNode child in root.ChildNodes)
{
    if (child.Attributes["Name"] != null)
        child.Attributes.Remove(child.Attributes["Name"]);
}

将属性设置为空字符串:

var doc = new System.Xml.XmlDocument();
doc.Load("somefile.xml");
var root = doc.FirstChild;

foreach (System.Xml.XmlNode child in root.ChildNodes)
{
    if (child.Attributes["Name"] != null)
        child.Attributes["Name"].Value = "";
}

编辑:如果您详细说明原始请求,我可以尝试修改我的代码。 XML文档只能有一个根节点,而您的根节点似乎是record1。那么这是否意味着您的整个文件只包含一条记录?或者你的意思是有什么像

<?xml version="1.0" standalone="yes" ?>
<Records>
    <Record>
        <Attribute Name="DataFieldName" Value="Pages" />
    </Record>
    <Record>
        <Attribute Name="DataFieldName" Value="Pages" />
    </Record>
</Records>

答案 1 :(得分:1)

您可以使用XmlNamedNodeMap.RemoveNamedItem方法(名称)来执行此操作。它可以用于Attributes.It将返回从此XmlNamedNodeMap中删除的XmlNode或者如果找不到匹配的节点则返回null引用(在Visual Basic中为Nothing)。

    [C#] 
    using System;
    using System.IO;
    using System.Xml;

   public class Sample
   {
    public static void Main()
    {
     XmlDocument doc = new XmlDocument();
     doc.LoadXml("<book genre='novel' publicationdate='1997'> " +
                 "  <title>Pride And Prejudice</title>" +
                 "</book>");      

     XmlAttributeCollection attrColl = doc.DocumentElement.Attributes;

     // Remove the publicationdate attribute.
     attrColl.RemoveNamedItem("publicationdate");

     Console.WriteLine("Display the modified XML...");
     Console.WriteLine(doc.OuterXml);

     }
   }