2014-03-31 43 views
0

我的XML看起来像这样(从文件中读取):如何使用XmlReader读取短标签XML而不添加关闭元素?

<root> 
    <date month="November" year="2001"/> 
</root> 

我想编辑日期元素的year属性值,让我们说是“3000”。 我使用的XmlDocument和XmlReader中类,以编辑此属性,像这样:

XmlDocument xml = new XmlDocument();    
using (XmlReader reader = XmlReader.Create(xmlPath)) 
     xml.Load(reader); 

的问题是,该的XmlReader读取XML这样的:

<root> 
     <date month="November" year="2001"> </date> 
</root> 

意义,它增加了date元素的关闭元素。 我以后用Save方法保存编辑的XML。

我需要最终的XML与原始XML这样的短标签。 有没有办法在不添加关闭元素的情况下使用XmlReader?

+0

如果你只阅读,那么你可以使用'reader.IsEmptyElement'检查;但从根本上说,他们的意思是我正在阅读,编辑和保存的东西 –

+0

。 我知道他们的意思是一样的,但我需要编辑的XML与原始空元素一样。 – TomG

回答

3

如果XML文件不是很大,你可以使用一个XElement就地进行编辑:

XElement xml = XElement.Load("test.xml"); 
var date = xml.Element("date"); 
date.Attribute("year").SetValue("3000"); 
xml.Save("test.xml"); 
+0

它是否可用.Net 2.0? – TomG

+0

@Tom不,它是在.NET 3.5中作为LINQ框架的一部分添加的。如果有一个特定的.NET运行时,你必须定位,那么值得把它作为你的问题添加一个标记。 –

+0

我加了它,出于某种原因它被删除了。 我又添加了它 – TomG

0

试试这个解决您的问题。我简单地更新year属性,你可以改变相应

XmlDocument myXmlDocument = new XmlDocument(); 
     myXmlDocument.Load(Server.MapPath("~/Book.xml")); 
     XmlNode node; 
     node = myXmlDocument.DocumentElement; 

     foreach (XmlNode node1 in node.ChildNodes) 
     { 
      if (node1.Name == "date") 
      { 
       node1.Attributes["year"].Value = "2005"; 
      } 
     } 
     myXmlDocument.Save(Server.MapPath("~/Book1.xml"));