【问题标题】:How to use XmlReader to read a short tag XML without adding a closing element?如何在不添加结束元素的情况下使用 XmlReader 读取短标签 XML?
【发布时间】:2014-03-31 10:41:49
【问题描述】:

我的 XML 看起来像这样(从文件中读取):

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

我正在尝试编辑日期元素中的年份属性值,假设为“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>

意思是,它将结束元素添加到日期元素。 稍后我将使用 Save 方法保存编辑后的 ​​XML。

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

【问题讨论】:

  • 如果你只是阅读,那么你可以使用reader.IsEmptyElement来检查;但从根本上说,它们的意思是一样的
  • 我正在阅读、编辑和保存。我知道它们的意思是一样的,但我需要编辑后的 ​​XML 与原始元素一样具有空元素。

标签: c# .net xml .net-2.0


【解决方案1】:

如果 XML 文件不是很大,您可以使用 XElement 就地编辑它:

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

【讨论】:

  • 在 .Net 2.0 中是否可用?
  • @Tom 不,它是作为 LINQ 框架的一部分添加到 .NET 3.5 中的。如果您必须定位特定的 .NET 运行时,那么值得将其添加为针对您的问题的标签。
  • 我添加了它,由于某种原因它被删除了。我又加了一次
【解决方案2】:

试试这个解决你的问题。我只是更新年份属性,你可以相应地改变

    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"));

【讨论】:

    猜你喜欢
    • 2011-06-30
    • 1970-01-01
    • 2020-06-03
    • 2023-03-29
    • 2019-06-05
    • 2020-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多