2009-06-07 76 views
3

我的問題是這樣的: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生命的哪個點是節點合併完成?在每次插入?在撰寫文件時明確要求?

謝謝。

+0

這個問題可以重寫如下嗎? 「如何將節點的子節點移動到另一個節點?」 – Glenn 2009-06-12 20:19:43

回答

1

如果使用xalan,可以使用xpath來查找元素並直接插入到correc中。

下面的代碼可能會很慢,但會返回屬性「one」設置爲「start」的所有「root」元素。

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

這可能是更好的使用完整路徑

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

,或者如果你已經擁有了相對

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

父元素的工作,我想拿到的基本概念xpath on wikipedia

0

如果您知道存在各種不同標籤的容器標籤的名稱,是不是隻是一分鐘的任務?

在您的示例中,獲取所有XML文檔中alpha標記的指針,並將所有這些標記的內容放入新文檔的alpha中(如果它們不存在)。

這不像重塑車輪那麼糟糕。我不熟悉Xerces,但是使用libxml ++,我會把它稱爲一件容易的事。