Xerces:如何合并重复节点?

3

我的问题是:

如果我有以下 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++)中是否有特定的方法来完成它?
如果有,DOMDocument在哪个时刻执行节点合并?每次插入时?在文档写入时?显式按需执行?
谢谢。

这个问题可以改成如下表述吗? “如何将节点的子节点移动到另一个节点?” - Glenn
2个回答

1
如果您使用xalan,则可以使用xpath查找元素并直接插入到正确的元素中。
以下代码可能会慢,但会返回所有属性设置为“start”的“根”元素。
selectNodes("//root[@one="start"]")

最好使用完整路径。

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

或者如果您已经有了父元素,请使用相对路径

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

我认为可以通过维基百科上的XPath来了解基本概念。


0

如果你知道包含不同标签的容器标签的名称,这岂不是只需一分钟的任务吗?

在您的示例中,在所有XML文档中获取指向alpha标记的指针,并将它们的内容放入新文档的alpha中,如果它们还不存在。

这并不像重新发明轮子那样糟糕。我不熟悉Xerces,但使用libxml ++,我会将其称为一个简单的任务。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接