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++)中是否有特定的方法来做到这一点?

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

谢谢。

4

2 回答 2

1

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

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

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

使用完整路径可能更好

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

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

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

我想在 wikipedia 上获得 xpath的基本概念。

于 2009-06-12T15:10:52.963 回答
0

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

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

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

于 2009-06-07T11:15:17.860 回答