Greetings, I am trying to build simple XML database (inside baseX or existdb
- but baseX seems nicer for java APIs), but I have trouble figuring how to
modify values in document :
content is simple as this for test :
<p>
</pl>
<id>6></id>
</pl>
</p>
I am trying to build something like function which would insert element into
<pl> if that element is not present or replace it if it is present. But
Xquery is giving me troubles yet :
When I try it head-on with if-then-else logic :
if (exists(/p/pl[id=6]/name)=false)
then insert node <name>thenname</name> into /p/pl[id=6]
else replace value of node /p/pl[id=6]/name with 'elsename'
I get error Error: [XUDY0027] Replace target must not be empty. - clearly I
am confused, why the else part is evaluated in both cases, thus the error.
When I empty out the else part :
if (exists(/p/pl[id=6]/name)=true)
then insert node <name>thenname</name> into /p/pl[id=6]
else <dummy/>
Then I get Error: [XUST0001] If expression: no updating expression allowed.
When I try through declaring updating function, even then it reports error :
declare namespace testa='test';
declare updating function testa:bid($a, $b)
{
if (exists(/p/pl[id=6]/name)=true)
then insert node <name>thenname</name> into /p/pl[id=6]
else <dummy/>
};
testa:bid(0,0)
Error: [XUST0001] If expression: no updating expression allowed.
I've got these errors from baseX 6.5.1 package.
So how can I modify values in a simple fashion if possible ? If I call
insert straight, the there could be multiple elements of same value. If I
call replace it will fail when the node does not exist. If I delete the node
before insert/replace then I could destroy sub-nodes which I don't want.
In most SQL databases, these are quite simple task (like MYSQL 'replace'
command).
Thanks in advance for any hints and tips how to get basic 'replace'
functionality done.
Regards
Petr Vacek