如何禁用Document root的创建

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何禁用Document root的创建相关的知识,希望对你有一定的参考价值。

我正在使用EMF和XSD生成的ecore。现在我遇到了问题,生成的文件无效。有两个原因:

  1. 插入了一个DocumentRoot元素
  2. 属性具有错误的大小写。

问题是:它不是模型的问题,它是保存过程的问题(因为在EMF生成的编辑器中输出是正确的。

首先是正确的结果:

<?xml version="1.0" encoding="UTF-8"?>
<model:widgetspecification xmlns:model="http://test.com/model" Description="DESC" Name="NAME">
  <model:Property Name="PROP1"/>
  <model:Property Name="PROP2/>
</model:widgetspecification>

实际结果:

<?xml version="1.0" encoding="ASCII"?>
<model:DocumentRoot xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:model="http://test.com/model">
  <widgetspecification description="DESC" name="NAME">
    <property name="PROP1"/>
    <property name="PROP2"/>
  </widgetspecification>
</model:DocumentRoot>

最后是保存程序(只输出到sysout)

Resource resource = new XMIResourceImpl();
resource.getContents().add(modelRoot);
resource.save(System.out, Collections.EMPTY_MAP);

可悲的是,我在保存程序中找不到任何相关的差异(虽然EMF生成的代码当然要复杂得多) - 我想我可能错过了s.th.但我还没有找到任何东西)。同样有趣的是,EMF生成的文件是UTF-8,但我找不到设置此选项的任何引用。

答案

使用XMLResource而不是XMIResource并将OPTION_EXTENDED_META_DATA设置为true。

XMLResource resource = new XMLResourceImpl();
resource.setEncoding("UTF-8");
resource.getContents().add(modelRoot);
Map<Object, Object> options = new HashMap<>();
options.put(XMLResource.OPTION_EXTENDED_META_DATA, true);
resource.save(System.out, options);

以上是关于如何禁用Document root的创建的主要内容,如果未能解决你的问题,请参考以下文章

26个jQuery代码片段使用技巧

maven web项目的web.xml报错The markup in the document following the root element must be well-formed.(代码片段

js代码片段

如何禁用在android片段类中按下的后退按钮

片段交易后如何禁用按钮?

如何在 Android 片段中禁用屏幕截图?