C#中的XML元素更改值

时间:2014-03-12 09:39:39

标签: c# xml xmlreader

c#代码如下:

using (XmlReader Reader = XmlReader.Create(DocumentPath, XmlSettings))
{
    while (Reader.Read())
    {
        switch (Reader.NodeType)
        {
            case XmlNodeType.Element:
                //doing function
                break;
            case XmlNodeType.Text:
                if(Reader.Value.StartsWith("_"))
                {
                     // I want to replace the Reader.Value to new string
                }
                break;
            case XmlNodeType.EndElement:
                //doing function
                break;
            default:
                //doing function
                break;
        }
    }
}

我想在XmlNodeType = text。

时设置新值

2 个答案:

答案 0 :(得分:1)

此操作有3个步骤:

  1. 将文档作为对象模型加载(XML是层次结构,如果这样更容易)
  2. 更改对象模型中的值
  3. 将模型重新保存为文件
  4. 加载方法取决于你,但我建议使用XDocument和相关的Linq-to-XML类来完成这样的小任务。这很容易as demonstrated in this stack.

    编辑 - 对您的方案有用的引用

      

    XML元素可以包含文本内容。有时内容很简单   (元素只包含文本内容),有时内容是   mixed(元素的内容包含text和other   元件)。在任何一种情况下,每个文本块都表示为   XText节点。

    来自MSDN - XText class

    以下是使用评论中的xml的控制台应用程序的代码示例:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Xml.Linq;
    
    namespace TextNodeChange
    {
        class Program
        {
            static void Main(string[] args)
            {
                string input = @"<Info><title>a</title><content>texttexttexttexttext<tag>TAGNAME</tag>texttexttex‌​ttexttext</content>texttexttexttexttext</Info>";
    
                XDocument doc = XDocument.Parse(input);
                Console.WriteLine("Input document");
                Console.WriteLine(doc);
    
                //get the all of the text nodes in the content element
                var textNodes = doc.Element("Info").Element("content").Nodes().OfType<XText>().ToList();
    
                //update the second text node
                textNodes[1].Value = "THIS IS AN ALTERED VALUE!!!!";
    
                Console.WriteLine();
                Console.WriteLine("Output document");
                Console.WriteLine(doc);
                Console.ReadLine();
            }
        }
    }
    

    为什么需要3个步骤?

    xml的元素在文件中具有可变长度。更改值可能会更改文件该部分的长度并覆盖其他部分。因此,您必须反序列化整个文档,进行更改并再次保存。

答案 1 :(得分:0)

您无法替换reader.value readonly属性。您需要使用XmlWriter创建自己的xml并替换所需的任何值。