【问题标题】:Synchronize two DOM trees in Java在 Java 中同步两个 DOM 树
【发布时间】:2012-11-08 23:14:07
【问题描述】:

我以不同的格式提出了这个问题,并且提到了 XSLT,但我认为我没有解释我需要的解决方案。我有两个 xml 文件并使用 Java,我正在尝试编写一个程序,该程序将接受源和目标 xml 文件,并且在大多数情况下,它们将具有相同的结构,除了源将添加一些新元素,我需要弄清楚找出我如何导航源 DOM 以及如果在目标中找不到元素然后添加它,或者此时甚至只是让程序输出在目标文件中找不到哪些元素,从而更容易手动修改目标文件。有谁知道一个实用程序,我可以在其中执行类似的操作,并且只获取目标 xml 文件中未找到的元素列表。我是否正确使用 DOM 解析器与 SAX。我需要这方面的帮助,今天必须编写它并且有大约 50 个 xml 文件要合并!

我的想法是否符合为每个节点或元素导航整个源 DOM 获取完整路径(如 people/person/john)然后在我的目标 DOM 上以某种方式测试以查看该节点是否存在的想法?这听起来更像是 DOM 还是 SAX 解析范式?

【问题讨论】:

  • 写问题时,尽量让它们易于阅读。第一段内容很大,很乱。
  • 如果您只需要查找两个文件之间的差异,那么“diff”(命令行、unix/mac)或图形差异工具(“meld”或“winmerge”)怎么样。假设您的 xml 以类似的方式格式化,差异将会弹出。
  • tucuxi,将听取您对未来问题的反馈意见。

标签: java xml dom merge sax


【解决方案1】:

看来你的问题要简单得多。

  1. 将源代码解析为 DOM
  2. 将 dest 解析为 DOM
  3. 在深度优先搜索中并行遍历源和目标
  4. 每当您在 dest 中找到 source 中缺少的内容时,添加它(如 cmets 中所述,一种简单的方法是 Document.importNode()

【讨论】:

  • 您可能还想提及 Document#importNode docs.oracle.com/javase/6/docs/api/org/w3c/dom/…, boolean)
  • 太好了,我是 DOM 的新手,你能解释更多吗 3) 在深度优先搜索并行中遍历源和目标。如果你做合同工作,我很乐意完成这项工作,我很乐意为代码付费。
  • @DuncanKrebs - 见Node.getChildNodes()
  • 好的,所以我需要搞清楚 API。感谢您让我走上正轨,我接受了答案并投了赞成票。
猜你喜欢
  • 1970-01-01
  • 2017-01-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多