如何使用TCL(TDom)在现有xml文件中插入新节点

时间:2011-05-07 01:13:24

标签: xml dom tcl tdom

我有一个包含更多节点的现有XML文档,我想插入一个新节点,但是在某个位置。

该文件类似于:

<root>   
    <a>...</a>
    <c>...</c>
    <e>...</e>
</root> 

...可以被视为xml标签a ... / a,c ... / c,e ... / e。 (格式化问题)

新节点应按字母顺序插入节点之间,从而产生:

<root>
    <>
    new node
    <>
    <>
    new node
    <>
    <>
    <>
    new node

如何在TCL中使用XPath来查找现有节点并在其之前或之后插入新节点。

我还想保留顺序,因为XML文档中的现有标签按字母顺序排列。

目前我正在使用tdom包。

有没有人知道如何插入这样的节点?

2 个答案:

答案 0 :(得分:2)

如果您已将此文件保存在demo.xml

<root>
    <a>123</a>
    <c>345</c>
    <e>567</e>
</root>

想要去(模数空白):

<root>
    <a>123</a>
    <b>234</b>
    <c>345</c>
    <d>456</d>
    <e>567</e>
</root>

然后这是执行此操作的脚本:

# Read the file into a DOM tree
package require tdom
set filename "demo.xml"
set f [open $filename]
set doc [dom parse [read $f]]
close $f

# Insert the nodes:
set container [$doc selectNodes /root]

set insertPoint [$container selectNodes a]
set toAdd [$doc createElement b]
$toAdd appendChild [$doc createTextNode "234"]
$container insertAfter $insertPoint $toAdd

set insertPoint [$container selectNodes c]
set toAdd [$doc createElement d]
$toAdd appendChild [$doc createTextNode "456"]
$container insertAfter $insertPoint $toAdd

# Write back out
set f [open $filename w]
puts $f [$doc asXML -indent 4]
close $f

答案 1 :(得分:0)

我很确定Tcl wiki上tdom的tutorial可以回答你的所有问题。维基上的Xpath还有一些其他信息。