【问题标题】:Getting xml from ckeditor 5从ckeditor 5获取xml
【发布时间】:2019-03-01 04:27:39
【问题描述】:

如何从 ckeditor 获取输出为 XML 而不是 HTML?

我以为我可以使用 editor.data.processor=new XmlDataProcessor(); 但这似乎只适用于编辑器现在在调用 editor.setData() 时需要 XML 但 editor.getData() 仍返回 HTML 而不是 XML 的输入。数据不包含在根元素中,<img> 标签未关闭。

应该转换为 XML 的 toData 方法实现如下,因为它尝试使用 _htmlWriter 转换为 XML,所以它看起来不像可以工作的东西。所以它看起来就像一个从未实现过的功能。

toData( viewFragment ) {
    // Convert view DocumentFragment to DOM DocumentFragment.
    const domFragment = this._domConverter.viewToDom( viewFragment, document );

    // Convert DOM DocumentFragment to XML output.
    // There is no need to use dedicated for XML serializing method because BasicHtmlWriter works well in this case.
    return this._htmlWriter.getHtml( domFragment );
}

【问题讨论】:

  • 你试过使用toData/toView吗? ckeditor.com/docs/ckeditor5/latest/api/…
  • @DipenShah 那也行不通。它只返回 html(请参阅我的编辑)。我想问题只是没有编写转换为 xml 的代码,所以我现在将填写错误报告
  • 它被写成:github.com/ckeditor/ckeditor5-engine/blob/master/src/… ...虽然 CDN 构建中可能缺少它。从源代码构建应该是这里的答案。
  • 是的,该类存在,但 github 上的类仍然使用 this._htmlWriter.getHtml( domFragment ) 将数据“转换”为 xml,这不起作用。

标签: javascript xml ckeditor ckeditor5


【解决方案1】:

我不知道输出 XML 的 CKEditor 5 method for getting data。但是,一个潜在的解决方法是使用 XMLSerializer 将 HTML 输出转换为 XML

例如(为方便起见,下面使用node 变量,因为XMLSerializer 需要DOM Node 作为输入而不是HTML 字符串):

const node = document.createElement('div');
ClassicEditor
  .create(document.querySelector('#editor'))
  .then((editor) => {
    editor.ui.focusTracker.on('change:isFocused', (event, name, value) => {
      if (!value) {
        const serializer = new XMLSerializer();
        node.innerHTML = editor.getData();
        console.log(serializer.serializeToString(node));
      }
    });
  })
  .catch(error => {
    console.error(error);
  });
<script src="https://cdn.ckeditor.com/ckeditor5/11.2.0/classic/ckeditor.js"></script>
<div>Enter something and click outside the CKEditor to view the xml string in the console</div>
<textarea name="content" id="editor"></textarea>

【讨论】:

  • 谢谢,没想到只是自己进行转换。唯一的小问题是 XMLSerializer 在 Safari(Mac OS X) 上存在错误  结果。但是没有什么是字符串替换解决不了的。
猜你喜欢
  • 2018-03-30
  • 1970-01-01
  • 2018-07-01
  • 2012-12-13
  • 2020-01-29
  • 2018-04-11
  • 2012-05-17
  • 2011-01-27
  • 2018-10-15
相关资源
最近更新 更多