Здравствуйте, c-smile, Вы писали:
LCR>>Вот приходит большая XML-на из сетки, мы её можем без интеллектуальной работы руками превратить в нормальный объект класса языка D?
CS>Что такое "нормальный объект"? Это DOM построить? Все как обычно SAX parser -> DOM factory.
CS>Или я чего не понял?
Кусок нумбер 1.
// obtain value of attribute "number"
NamedNodeMap common_attrib = common_node.getAttributes();
Node common_number = common_attrib.getNamedItem("number");
if (common_number == null)
continue; // ignore the node
String s = common_number.getNodeValue();
Кусок нумбер 2.
String s = xxx.Number; // ну или String s = xxx.getNumber();
В данном случае я этот xxx назвал "нормальным объектом". С ним работать легко и приятно. Класс создаётся на основе содержимого XSD, а объект — на основе содержимого конкретной XML. Это так называемый binding.
CS>Я наверное не понял вопрос. Что exactly означает "классы генерятся на лету"?
Хорошо, продолжим пример выше... Как такой binding можно реализовать на D? Вот у нас запущена программа. Прекрасно! К нам приходит по сети XSD. Мы можем вызвать генератор, он сгенерит файл с исходным кодом, затем мы можем вызвать компилятор — скомпилируется бинарный файл. Но теперь нужно создать объект этого класса — и вот тут мы приплыли. У нас нет инструментов для загрузки этого файла в программу, чтобы потом ему сделать newInstance. (То есть я как бы ждал аналога ClassLoader, теперь я понял что его не может быть принципиально).