【问题标题】:Xerces: How to merge duplicate nodes?Xerces:如何合并重复节点?
【发布时间】:2009-06-07 09:16:01
【问题描述】:

我的问题是这样的:

如果我有以下 XML:

<root>
  <alpha one="start">
    <in>1</in>
  </alpha>
</root>

然后我将添加以下路径:

<root><alpha one="start"><out>2</out></alpha></root>

导致

<root>
  <alpha one="start">
    <in>1</in>
  </alpha>
</root>
<root>
  <alpha one="start">
    <out>2</out>
  </alpha>
</root>

我希望能够将其转换为:

<root>
  <alpha one="start">
    <in>1</in>
    <out>2</out>
  </alpha>
</root>

除了自己实现之外(今天不想重新发明轮子), Xerces (2.8,C++) 中有具体的方法吗?

如果是这样,节点合并在 DOMDocuments 生命周期的哪个时间点完成?每次插入?在撰写文件时,明确地根据要求?

谢谢。

【问题讨论】:

  • 这个问题可以改写如下吗? “如何将一个节点的子节点移动到另一个节点?”

标签: c++ xml xerces


【解决方案1】:

如果您使用 xalan,则可以使用 xpath 查找元素并直接插入到正确的元素中。

以下代码可能很慢,但会返回所有“根”元素,属性“one”设置为“start”。

selectNodes("//root[@one="start"]")

使用完整路径可能会更好

selectNodes("/abc/def/.../root[@one="start"]")

或者如果您已经让父元素相对工作

selectNodes("./root[@one="start"]")

我想了解基本概念xpath on wikipedia

【讨论】:

    【解决方案2】:

    如果您知道存在各种不同标签的容器标签的名称,这不只是一分钟的任务吗?

    在您的示例中,获取指向所有 XML 文档中的 alpha 标记的指针,并将所有这些内容的内容放入新文档的 alpha 中(如果它们还没有出现)。

    这并不像重新发明轮子那么糟糕。我不熟悉 Xerces,但使用 libxml++,我认为这是一项简单的任务。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-01-21
      • 1970-01-01
      • 1970-01-01
      • 2018-07-07
      • 2011-11-09
      • 1970-01-01
      • 2013-07-19
      相关资源
      最近更新 更多