我正在尝试弄清楚如何使用我XmlTextReader
的XmlTextWriter
程序的配置文件。
xml 文件如下所示:
<?xml version="1.0" encoding="utf-8"?>
<Base>
<Global>
<some_config_value>86400</some_config_value>
<test1>t_1</test1>
<test2>t_2</test2>
<test3>t_3</test3>
<test4>t_4</test4>
</Global>
<test_head>
<test5>t_5</test5>
<test6>t_6</test6>
</test_head>
</Base>
这是我到目前为止的课程:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
namespace my_program.Global
{
class CXMLConfig
{
private string path;
public CXMLConfig(string filepath)
{
path = filepath;
}
public string XmlReadValue(string Section, string Key)
{
XmlTextReader textReader = new XmlTextReader(path);
ReadElements readEl = new ReadElements(textReader, Section, Key);
textReader.Close();
return readEl.Value;
}
private class ReadElements
{
XmlTextReader textReader;
string Section;
string Key;
private bool inBase = false;
private bool inSection = false;
private bool inKey = false;
public string Value { get; private set; }
public ReadElements(XmlTextReader textReader_set, string Section_set, string Key_set)
{
Value = "";
this.textReader = textReader_set;
this.Section = Section_set;
this.Key = Key_set;
textReader.Read();
while (textReader.Read())
{
// Move to fist element
textReader.MoveToElement();
string nodetype = textReader.NodeType.ToString();
if (textReader.LocalName == "Base")
{
if (nodetype == "Element")
{
if (!inBase)
inBase = true;
}
else if (nodetype == "EndElement")
{
if (inBase)
inBase = false;
}
}
else if (inBase && textReader.LocalName == Section)
{
if (nodetype == "Element")
{
if (!inSection)
inSection = true;
}
else if (nodetype == "EndElement")
{
if (inSection)
inSection = false;
}
}
else if (inBase && inSection && textReader.LocalName == Key)
{
if (inSection)
{
if (nodetype == "Element")
{
if (!inKey)
inKey = true;
}
else if (nodetype == "EndElement")
{
if (inKey)
inKey = false;
}
}
}
else if (inBase && inSection && inKey)
{
if (nodetype == "Text")
{
Value = textReader.Value.ToString();
//Console.WriteLine(Value);
}
}
}
}
}
}
}
所以首先,这可能是糟糕的 XML。我以前从未使用过它,它看起来确实有点……奇怪。还有一个事实是我编写了整个ReadElements
类来从配置文件中读取一个值,但我想会有一种更简单的方法来做到这一点XmlTextReader
(但我找不到它)。最后,我还没有弄清楚如何在XmlTextWriter
不从上到下重写整个 xml 文件的情况下更新 xml 文件中的值。