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。
时设置新值答案 0 :(得分:1)
此操作有3个步骤:
加载方法取决于你,但我建议使用XDocument
和相关的Linq-to-XML类来完成这样的小任务。这很容易as demonstrated in this stack.
编辑 - 对您的方案有用的引用
XML元素可以包含文本内容。有时内容很简单 (元素只包含文本内容),有时内容是 mixed(元素的内容包含text和other 元件)。在任何一种情况下,每个文本块都表示为 XText节点。
以下是使用评论中的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>texttexttexttexttext</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并替换所需的任何值。