Парсер XML SAX для скриптинга с использованием отражения - PullRequest
4 голосов
/ 15 сентября 2010

Мне бы хотелось узнать мнение о создании гипотетической системы сценариев с использованием XML. Идея состоит в том, чтобы использовать синтаксический анализатор SAX и отражение C #.

Я не могу найти библиотеку / фреймворк, которые позволяют задавать пользовательские действия с использованием файлов XML В настоящее время я использую XML для сериализации классов приложений. Ошибка может указывать на то, какие действия должно выполнять приложение с использованием XML.

Итак, я думаю о:

  • Реализация SAX-парсера для C #?
  • Условные обозначения XML-скриптов?

Чего бы я хотел достичь, так это: - Возможность назначить свойство экземпляра класса - Возможность вызова подпрограмм экземпляра класса

Если предположить, что экземпляр класса неявный, следующий XML-скрипт будет для меня золотом:

<Script>
    <Property Name='SomeProperty'>
        <Value>
            < ... >
        </Value>
    </Property>
    <RoutineCall>
        <Parameters>
            <Parameter Name='ArgName'>
                < ... >
            </Parameter>
        </Parameters>
    </RoutineCall>
</Script>

Это уже кем-то сделано? Возможно ли это?

Ответы [ 2 ]

1 голос
/ 24 сентября 2010

У Microsoft нет парсера SAX для .Net. Однако у них есть класс XmlTextReader, который вы можете использовать для одновременного чтения xml узла. В дополнение к MSBuild кажется, что диалект xaml, используемый Microsoft вначале для WPF, а теперь и в .Net 4.0 WWF, может быть аналогичен тому, что вы хотите делать в сценариях. Я не уверен, каковы ваши требования к этому проекту, если вы действительно хотите сделать все возможное, вы можете использовать технологию генерации кода в .Net, чтобы скомпилировать сценарий для повышения производительности.

1 голос
/ 15 сентября 2010

Хотя парсеры не SAX, MSBuild и NAnt являются отличными примерами платформ сценариев на основе XML. Оба поддерживают разработку пользовательских действий и имеют большие сообщества пользователей, которые могут помочь вам в этом.

Если вам необходимо создать это с нуля, я рекомендую создавать сериализуемые классы, реализующие простой интерфейс выполнения (например, метод Run(), известные события и т. Д.). Затем вы можете использовать .NET XmlSerializer для десериализации объектов, приведения к интерфейсу и вызова их подпрограмм.

...