Xerces:如何合并重复的节点?

时间:2009-06-07 09:16:02

标签: c++ xml xerces

我的问题是:

如果我有以下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生命的哪一点是节点合并完成了?每次插入?在撰写文件时,明确要求?

感谢。

2 个答案:

答案 0 :(得分:1)

如果您使用xalan,则可以使用xpath查找元素并直接插入相关元素。

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

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

使用完整路径

可能更好
selectNodes("/abc/def/.../root[@one="start"]")

或者您已经拥有父元素工作相对

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

我想要获得基本概念xpath on wikipedia

答案 1 :(得分:0)

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

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

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