Как скопировать узлы XML из текстового файла и вставить его как EObject EMF в Eclipse?

У меня есть текстовый файл, который содержит несколько узлов XML. Я хочу, чтобы каждый узел копировался / конвертировался как объект EMF и вставлялся в редактор затмений (используя Ctrl + C в текстовом файле и Ctrl + V в редакторе затмений). Но я не могу вставить в редактор Eclipse. Можете ли вы помочь мне.

1 ответ

У меня был похожий вопрос. Вы можете прочитать свою модель XML и преобразовать ее в модель XMI. Таким образом, вам нужно внедрить следующий код в ваш проект EMF. Я создал новый класс и сгенерировал метод main, включая этот код:

    //Generate your URI
    ResourceFactoryImpl factory = new ResourceFactoryImpl();
    URI sourceURI = URI.createURI("your xml path");
    Resource loadResource = (ResourceImpl)factory.createResource(sourceURI);
    System.out.println(sourceURI.path());

    //Add loading options
    Map<String, Boolean> options = new HashMap<String, Boolean>(); 
    options.put(XMLResource.OPTION_SUPPRESS_DOCUMENT_ROOT, true);

    //Load XML
    loadResource.load( options);

    //Create XMI output
    URI targetURI = URI.createURI("your xmi path");
    Resource resourceOut = new ResourceImpl(targetURI);

    //Generating your EObjects from XML model
    EList listObj = loadResource.getContents();
    EObject obj = (EObject) listObj.get(0);
    resourceOut.getContents().add(obj);

    resourceOut.save(options);

Помните, что вам нужно зарегистрировать ваши EPackages из вашей модели ecore. Итак, щелкните правой кнопкой мыши вашу метамодель.ecore и выберите опцию "Зарегистрировать EPackages". Если на этом этапе возникнет проблема, вы получите org.eclipse.emf.ecore.resource.Resource$IOWrappedException: пакет с uri ' http://something.com/' не найден. (XML-путь).

В заключение:

  1. Вызовите метод в ваш основной метод, который включает представленный код.
  2. Зарегистрируйте свои EPackages.
  3. Если вы получили исключение, преобразуйте данные URI в XML.

PD: Код, представленный в этом посте, изначально был создан @victormpav. Я добавляю некоторые модификации.

Другие вопросы по тегам