17.04.2011

Простенький парсер XML.

Вообщем, по работе потребовалось проанализировать файлы XML. Мне требовалось найти определенные ноды, которые содержат аттрибут template и вывести в файл все эти ноды.
Под катом смотрим код.

Ввод файлов я сделал через драг-дроп, пример из гугла найден.
Для чтения XML, создан простой объект XMLReader, который проходится по каждому ноду. Логика такова: если есть атрибут template, то записывам необходимую инфу в файл.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Xml;
using System.IO;

namespace Parser
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void Form1_DragEnter(object sender, DragEventArgs e)
{
// Check if the Dataformat of the data can be accepted
// (we only accept file drops from Explorer, etc.)
if (e.Data.GetDataPresent(DataFormats.FileDrop))
e.Effect = DragDropEffects.Copy; // Okay
else
e.Effect = DragDropEffects.None; // Unknown data, ignore it
}

private void Form1_DragDrop(object sender, DragEventArgs e)
{
// Extract the data from the DataObject-Container into a string list
string[] FileList = (string[])e.Data.GetData(DataFormats.FileDrop, false);

// Do something with the data...
TextWriter tw = new StreamWriter(@"C:\out.txt");
// For example add all files into a simple label control:
foreach (string File in FileList) {
XmlReader rdr = XmlReader.Create(new StreamReader(File));
while (rdr.Read())
{
if (rdr.NodeType == XmlNodeType.Element)
{
if (rdr.GetAttribute("template")!=null) {
tw.WriteLine(getFileName(File) + ";"+rdr.GetAttribute("name")+";"+rdr.GetAttribute("template"));
}
}
}
}
tw.Close();

}
private string getFileName(string path) {
string[] arr = path.Split('\\');
return arr[arr.Length-1];
}
}
}


Комментариев нет:

Отправить комментарий