Запись журналов к XML-файлу с.NET

Я всегда использовал:

if [ "x$STATE" == "x" ]; then echo "Need to set State"; exit 1; fi

Не то, чтобы намного более краткий, я боюсь.

Под CSH у Вас есть $? СОСТОЯНИЕ.

6
задан John Saunders 14 July 2009 в 00:18
поделиться

7 ответов

использовать XmlWriter.

пример кода:

    public class Quote
    {
        public string symbol;
        public double price;
        public double change;
        public int volume;
    }


    public void Run()
    {
        Quote q = new Quote
            {
                symbol = "fff",
                price = 19.86,
                change = 1.23,
                volume = 190393,
                };
        WriteDocument(q);
    }



    public void WriteDocument(Quote q) 
    {
        var settings = new System.Xml.XmlWriterSettings
            {
                OmitXmlDeclaration = true,
                Indent= true
            };

        using (XmlWriter writer = XmlWriter.Create(Console.Out, settings))
        {
            writer.WriteStartElement("Stock");
            writer.WriteAttributeString("Symbol", q.symbol);
            writer.WriteElementString("Price", XmlConvert.ToString(q.price));
            writer.WriteElementString("Change", XmlConvert.ToString(q.change));
            writer.WriteElementString("Volume", XmlConvert.ToString(q.volume));
            writer.WriteEndElement();
        }
    }

пример вывода:

<Stock Symbol="fff">
  <Price>19.86</Price>
  <Change>1.23</Change>
  <Volume>190393</Volume>
</Stock>

см. Написание с помощью XmlWriter для получения дополнительной информации.

4
ответ дан 10 December 2019 в 02:52
поделиться

Большая разница в том, как вы думаете о своих данных журнала. В текстовых файлах вы действительно просто добавляете новые строки. Однако XML - это древовидная структура, и вам нужно думать именно так. Вероятно, вы добавляете еще один УЗЕЛ, например:

<log>
   <time>12:30:03 PST</time>
   <user>joe</user>
   <action>login</action>
<log>

Поскольку это дерево, вам нужно спросить, к какому родительскому элементу вы добавляете этот новый узел. Обычно все это определяется в вашем DTD (иначе говоря, как вы определяете структуру своих данных). Надеюсь, это будет более полезно, чем то, какую библиотеку использовать, поскольку, как только вы поймете этот принцип, интерфейс библиотеки станет более понятным.

1
ответ дан 10 December 2019 в 02:52
поделиться

Зачем изобретать велосипед? Используйте TraceSource Class (System.Diagnostics) с XmlWriterTraceListener .

1
ответ дан 10 December 2019 в 02:52
поделиться

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

Для большинства XML-объектов существует метод, называемый «AppendChild». Вы можете использовать этот метод, чтобы добавить новый узел, который вы создаете, с комментарием журнала в нем. Этот узел появится в конце списка элементов. Вы можете использовать родительский элемент, в котором находятся все узлы журнала, в качестве объекта для вызова.

Надеюсь, что это поможет.

0
ответ дан 10 December 2019 в 02:52
поделиться

XML требуется элемент документа (в основном тег верхнего уровня, начинающий и заканчивающий документ). Это означает, что правильно сформированный XML-документ должен иметь начало и конец, что не очень подходит для журналов, в которых текущий «конец» журнала постоянно расширяется.

Если вы не пишете пакеты автономных журналов, в которых вы записывать все в один файл за короткий промежуток времени, я бы подумал о чем-нибудь другом, кроме XML.

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

0
ответ дан 10 December 2019 в 02:52
поделиться

Для редактирования файла xml вы также можете использовать LINQ. Вы можете посмотреть, как это сделать, здесь: http://www.linqhelp.com/linq-tutorials/adding-to-xml-file-using-linq-and-c/

0
ответ дан 10 December 2019 в 02:52
поделиться

Одна из проблем с записью файла журнала в формате XML заключается в том, что вы не можете просто добавлять строки в конец файла, потому что последняя строка должна иметь закрывающий корневой элемент (чтобы XML был действительным)

Эта запись в блоге Филиппа Де Вос демонстрирует неплохое решение этой проблемы:
Высокая производительность записи в файлы журнала XML (редактировать: ссылка теперь мертва, поэтому удалена)

По сути, у вас есть два файла XML связаны вместе с помощью XML-include:

Заголовочный файл:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log [
<!ENTITY loglines SYSTEM "loglines.xml">
]>
<log>
&loglines;
</log>

Файл строк (в этом примере с именем loglines.xml):

<logline date="2007-07-01 13:56:04.313" text="start process" />
<logline date="2007-07-01 13:56:25.837" text="do something" />
<logline date="2007-07-01 13:56:25.853" text="the end" />

Затем вы можете добавить новые строки в 'файл строк', но (большинство) анализаторов XML смогут открыть файл заголовка и правильно прочитать строки.

Филип отмечает, что: Этот XML не будет правильно анализироваться каждым анализатором XML на планете. Но все парсеры, которые я использовал, делают это правильно.

2
ответ дан 10 December 2019 в 02:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: