반응형
XML 문서가 아니더라도 태그와 속성을 사용한 설정 파일을 많이 사용한다.
XML 파일을 읽는 두 가지 방법
1. XmlReader
private void btLoad_Click(object sender, EventArgs e)
{
richTextBox1.Text = "";
XmlReaderSettings settings = new XmlReaderSettings();
settings.ConformanceLevel = ConformanceLevel.Fragment;
using (XmlReader reader = XmlReader.Create(File, settings))
{
textEdit_file.EditValue = File;
while (reader.Read())
{
if (reader.NodeType == XmlNodeType.XmlDeclaration)
{
reader.Skip();
continue;
}
XNode node = XNode.ReadFrom(reader);
richTextBox1.Text += node.GetOuterXml();
}
reader.Close();
}
}
XmlReader 클래스는 XmlReaderSettings 설정을 사용하면 XML 조각 파일을 읽을 수 있다.
2. XmlDocument
XmlDocument 클래스는 루트가 두 개 이상 존재하면 오류가 발생한다.
방법은 전체 코드를 읽어서 루트 코드로 감싼다.
private void loadXDoc_Click(object sender, EventArgs e)
{
richTextBox1.Text = "";
string buff = System.IO.File.ReadAllText(File);
XmlDocument doc = new XmlDocument();
doc.LoadXml("<root>" + buff + "</root>");
XmlNode node = doc.DocumentElement.SelectSingleNode("//root");
richTextBox1.Text = node.InnerXml;
}
그 다음 XML 태그, 속성, 값을 편집 후 XmlWriter를 하면 된다.
XmlWriter
private void UpdateXML(Stream inStream, Stream outStream)
{
var rsettings = new XmlReaderSettings();
rsettings.ConformanceLevel = ConformanceLevel.Fragment;
var wsettings = new XmlWriterSettings()
{
ConformanceLevel = ConformanceLevel.Fragment,
Indent = true,
IndentChars = "\t"
};
using (var reader = XmlReader.Create(inStream, rsettings))
{
using (var writer = XmlWriter.Create(outStream, wsettings))
{
while (reader.Read())
{
switch (reader.NodeType)
{
case XmlNodeType.Element:
writer.WriteStartElement(reader.Prefix, reader.Name, reader.NamespaceURI);
writer.WriteAttributes(reader, true);
if (reader.IsEmptyElement)
{
writer.WriteEndElement();
}
break;
case XmlNodeType.Text:
writer.WriteString(reader.Value);
break;
case XmlNodeType.EndElement:
writer.WriteFullEndElement();
break;
case XmlNodeType.XmlDeclaration:
case XmlNodeType.ProcessingInstruction:
writer.WriteProcessingInstruction(reader.Name, reader.Value);
break;
}
}
}
}
}
반응형