Как вставить новый узел в существующий XML-файл, используя TCL (TDom) - PullRequest
1 голос
/ 07 мая 2011

У меня есть существующий документ XML с большим количеством узлов, и я хочу вставить новый узел, но в определенной позиции.

Документ выглядит примерно так:

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

... можно рассматривать как теги xml a ... / a, c ... / c, e ... / e.(проблема форматирования)

Новые узлы должны быть вставлены в алфавитном порядке между узлами, в результате чего:

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

Как использовать XPath в TCL, чтобы найти существующий узел и вставитьновый узел до или после него.

Я также хочу сохранить порядок, поскольку существующие теги в документе XML расположены в алфавитном порядке.

В настоящее время я использую пакет tdom.

У кого-нибудь естьИдея о том, как вставить такой узел?

Ответы [ 2 ]

2 голосов
/ 07 мая 2011

Если у вас есть это в файле, 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
0 голосов
/ 07 мая 2011

Я уверен, что учебник для tdom в вики Tcl отвечает на все ваши вопросы.В вики также есть дополнительная информация о Xpath .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...