【问题标题】:Convert HTML tags to WordML with JavaScript使用 JavaScript 将 HTML 标签转换为 WordML
【发布时间】:2016-06-12 11:43:06
【问题描述】:

您知道仅使用 JavaScript 将 HTML 标记转换为 WordML 的任何方法吗?我需要获取 DOM 元素的内容并将里面的内容转换为 WordML。

【问题讨论】:

  • 你需要改变它还是它本质上已经是有效的 WordML?
  • 我需要修改它。基本上我想获取 DOM 内容,将标记更改为有效的 WordML 并使用 FileSaver.js 创建一个 XML Word 文档。

标签: javascript html wordml


【解决方案1】:

已经在 npm there doesn't seem to be a library 上寻找这个了。

所以我认为你将不得不自己制作。话虽如此,WordML 只是 XML 的一种特殊风格,对吧? This is the WordML你指的是?

因此,获取 DOM 元素的内容非常简单,您可以使用 jQuery 来完成。

var ele = $('#wordml-element');

您现在需要从那里将其转换为WordML 兼容的XML。您可以尝试为此使用xml library on npm

因此,您将把树状结构的 DOM 元素转换成树状结构的 XML 元素。这样做的推荐模式称为Visitor Pattern

从那里您将得到一个XML 结构,您可以使用相同的模式进一步操作它。最后,您会将XML 结构转换为字符串,然后将其保存到文件中。

现在,由于我真的不知道您尝试转换为WordML 的 HTML 的结构,我只能为您提供一个非常通用的代码解决方案,可能看起来像这样:

var xml = require('xml')

function onTransformButtonClick() {
  var options = {} // see documentation
  var ele = $('#wordml-element')[0]
  var wordml = transformElement(ele)
  var text = xml(wordml, options);
  fileSave(text);
}

function transformElement(ele) {
  switch(ele.tagName) { // You could use attributes or whatever
    case 'word-document':
      return transformDocument(ele);
    case 'word-body':
      return transformBody(ele);
    case 'word-p':
      return transformParagraph(ele);
    case 'word-r':
      return transformRun(ele);
    case 'word-text':
      return transformText(ele);
  }
}

function transformDocument(ele) {
  var wordDocument = xml.element({...})
  ele.childNodes.forEach(function (child) {
    wordDocument.push(transformElement(child))
  })
  return [wordDocument]
}

function transformBody(ele) {
  // create new element via xml library...
}

function transformParagraph(ele) {
  // create new element via xml library...
}

function transformRun(ele) {
  // create new element via xml library...
}

function transformText(ele) {
  // create new element via xml library...
}

具体的实现我就留给你吧,因为我不知道足够的细节给你更详细的答案。

【讨论】:

  • 由于他想将 HTML 转换为 WordML,所以 switch 语句不会出现在 HTML 标签而不是 WordML 标签上吗?另外我认为你需要做ele[0].tagName,因为它是一个 jQuery 选择器,而不是原生 DOM 元素。
  • 这应该是打开 HTML 标签。如果你愿意,你可以在 html 中使用 <word-document> 等元素,但也许他正在使用 <div kind="word-document"> 我不知道,但这只是打开的另一件事:ele.attr('kind')。这个想法只是一些识别价值的访问者模式。但是您对ele[0] 是正确的,除非您想使用jquery 来获取标记名。我会更新sn-p。
猜你喜欢
  • 2012-09-10
  • 2016-12-30
  • 2022-01-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-04
相关资源
最近更新 更多