Как хранить данные без использования базы данных и как их получить? - PullRequest
4 голосов
/ 09 апреля 2010

Я анализирую HTML-файл для извлечения табличной информации через имена столбцов. И я хочу, чтобы пользователь дал ввод для имени столбца. И в соответствии с именами столбцов будет извлечена табличная информация.

Теперь имена столбцов, которые будет вводить пользователь, на основе имен столбцов, я хочу найти табличную информацию из файла html.

Но где мне хранить эти имена столбцов, введенные пользователем? И как их восстановить? Я не хочу использовать базу данных.

РЕДАКТИРОВАТЬ : Как мы можем хранить данные в файле XML и как мы можем извлечь из него данные и как мы можем обновить файл XML для хранения данных? Как у меня есть 3 имени столбца Name, Address,Phone no, и для этого пользователь будет вводить возможные имена столбцов, такие как Nm,Add,PhNo. и Nam,Addre,PhoNo и т. Д.

Ответы [ 8 ]

10 голосов
/ 09 апреля 2010

Многие люди говорили о XML, это хорошая идея. Однако, если Linq доступен для вас, вы действительно можете использовать Linq to XML вместо анализа SAX / DOM.

Linq to XML облегчает анализ, создание и редактирование XML-файла по сравнению с SAX и DOM-анализатором. Использование синтаксического анализа SAX / DOM обычно требует большого количества циклов, чтобы добраться до нужного элемента или перемещаться по узлам.

Пример взят из MSDN:
Использование синтаксического анализа DOM:

XmlDocument doc = new XmlDocument();
XmlElement name = doc.CreateElement("Name");
name.InnerText = "Patrick Hines";
XmlElement phone1 = doc.CreateElement("Phone");
phone1.SetAttribute("Type", "Home");
phone1.InnerText = "206-555-0144";        
XmlElement phone2 = doc.CreateElement("Phone");
phone2.SetAttribute("Type", "Work");
phone2.InnerText = "425-555-0145";        
XmlElement street1 = doc.CreateElement("Street1");        
street1.InnerText = "123 Main St";
XmlElement city = doc.CreateElement("City");
city.InnerText = "Mercer Island";
XmlElement state = doc.CreateElement("State");
state.InnerText = "WA";
XmlElement postal = doc.CreateElement("Postal");
postal.InnerText = "68042";
XmlElement address = doc.CreateElement("Address");
address.AppendChild(street1);
address.AppendChild(city);
address.AppendChild(state);
address.AppendChild(postal);
XmlElement contact = doc.CreateElement("Contact");
contact.AppendChild(name);
contact.AppendChild(phone1);
contact.AppendChild(phone2);
contact.AppendChild(address);
XmlElement contacts = doc.CreateElement("Contacts");
contacts.AppendChild(contact);
doc.AppendChild(contacts);

Использование Linq to XML:

XElement contacts =
    new XElement("Contacts",
        new XElement("Contact",
            new XElement("Name", "Patrick Hines"),
            new XElement("Phone", "206-555-0144", 
                new XAttribute("Type", "Home")),
            new XElement("phone", "425-555-0145",
                new XAttribute("Type", "Work")),
            new XElement("Address",
                new XElement("Street1", "123 Main St"),
                new XElement("City", "Mercer Island"),
                new XElement("State", "WA"),
                new XElement("Postal", "68042")
            )
        )
    );

Проще сделать и намного понятнее.

Edit:
Сохраните дерево XML в contacts.xml:

// using the code above
contact.Save("contacts.xml");

Загрузить файл contacts.xml:

//using the code above
XDocument contactDoc = XDocument.Load("contacts.xml"); 

Для обновления элемента дерева в doc есть несколько функций, которые могут делать это в зависимости от того, что вы хотите сделать

3 голосов
/ 09 апреля 2010

Возможно, вы могли бы сериализовать DataTable, но имейте в виду, что если вы заполните его данными, это может стать большим и занять много времени для сериализации или десериализации. Если данные хранятся иначе, вы можете сохранить информацию о столбце в файле конфигурации / проекта.

НТН, -sa

1 голос
/ 09 апреля 2010

Если это всего десять столбцов, как насчет сохранения в App.Config строки с разделителями?

1 голос
/ 09 апреля 2010

Вы можете использовать XML-файлы в качестве альтернативы, хотя использование SQLite кажется гораздо более предпочтительным.Средства XML расположены в пространстве имен System.Xml.Вы можете использовать класс XMLReader / Writer для управления информацией в ваших файлах.На странице MSDN есть несколько хороших примеров использования .

1 голос
/ 09 апреля 2010

Альтернатива базе данных: http://www.filehelpers.com/

1 голос
/ 09 апреля 2010

Использовать базу данных. Если вы не хотите настраивать архитектуру клиент / сервер, используйте SQLite с несколькими воплощениями .Net или SQL Server Express .

0 голосов
/ 09 апреля 2010

Я думаю, что использование XML-файлов будет вашим лучшим вариантом.

Взгляните на эту статью, которая ясно показывает, как манипулировать файлом XML.

http://www.developer.com/article.php/3489611

НТН

0 голосов
/ 09 апреля 2010

Если у вас есть выбор , но база данных; тогда я бы пошел с Xml, использовать SAX для анализа, когда файл становится больше.

Узнайте, как манипулировать данными XML-файла с помощью C #

- EDIT -

Это ответ на ваш комментарий. Предположим, что у вас есть экран со следующими элементами управления:

  1. TextBox как txtColumnName; когда пользователь указывает имя столбца и нажимает кнопку добавления, сохраните его как атрибут xml.
  2. ComboBox как cbxColumns; выберите текущий столбец
  3. TextBox как txtValue; если это предусмотрено, сохраните значение в столбце, выбранном в комбинированном столбце.
  4. Кнопка добавления; Вы можете добавить кнопки удаления, обновления, а также.

Пожалуйста, перейдите по ссылке примера, это поможет вам добавить / удалить / обновить узлы во время выполнения. Вы можете использовать свой класс XmlDatabaseWrapper, который будет охватывать все операции CRUD.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...