> On 29. Mar 2018, at 16:37, Harald Freudenberger <[email protected]> 
> wrote:
> 
> Hello BaseX team
> 
> I am about to implement a simple web application which displays some items and
> allows an user to edit one item. So my database is simple:
> 
> data.xml:
> <items>
>   <item>
>     <id>1</id>
>     <text>just some text</text>
>   </item>
>   <item>
>     <id>2</id>
>     <text>some other text</text>
>   </item>
> </items>
> 
> Now I want to add a new item to this database. For first evaluation I'll use
> curl to insert a new node with:
> 
> curl -u admin:admin -i -X PUT -H "Content-Type: application/xml" -d 
> "<item><id>9999</id><text>hello</text></item>" 
> "http://localhost:8984/rest/data/items";
> 
> 
> The query to check if the new node has been inserted gives:
> 
> curl -u admin:admin -i -X POST -H "Content-Type: application/xml" -d "<query 
> xmlns='
> http://basex.org/rest'><text>//item</text></query>" 
> "http://localhost:8984/rest/data";
> 
> HTTP/1.1 200 OK
> Content-Type: application/xml; charset=UTF-8
> Content-Length: 1416
> Server: Jetty(8.1.18.v20150929)
> 
> <item>
>   <id>1</id>
>   <text>just some text</text>
> </item>
> <item>
>   <id>2</id>
>   <text>some other text</text>
> </item>
> <item>
>   <id>9999</id>
>   <text>hello</text>
> </item>
> 
> Fine. And now I'd like to try the edit an item.
> I start with fetching the item:
> curl -u admin:admin -i -X POST -H "Content-Type: application/xml" -d "<query 
> xmlns='
> http://basex.org/rest'><text>//item[id='9999']</text></query>" 
> "http://10.0.2.2:8984/rest/data";
> 
> HTTP/1.1 200 OK
> Content-Type: application/xml; charset=UTF-8
> Content-Length: 280
> Server: Jetty(8.1.18.v20150929)
> 
> <item>
>   <id>9999</id>
>   <text>hello</text>
> </item>
> 
> Now I do some modifications:
> 
> <item>
>   <id>9999</id>
>   <text>new text here</text>
>   <newnode>a new node</newnode>
> </item>
> 
> And then I want to write back this item with:
> 
> curl -u admin:admin -i -X POST -H "Content-Type: application/xml" -d "<query 
> xmlns='
> http://basex.org/rest'><text>replace node /data/items/item[id='9999'] with 
> <item><id>8888</id></item></text></query>" "http://10.0.2.2:8984/rest/crypto";
> 
> HTTP/1.1 400 Bad Request
> Content-Type: text/plain;charset=UTF-8
> Content-Length: 104
> Server: Jetty(8.1.18.v20150929)
> 
> cvc-type.3.1.2: Element 'text' is a simple type, so it must have no element 
> information item [children].
> 
> I tried <command> instead of <query> but the result is always the same.
> Am I doing something wrong here ? Is there a way to update a node with
> subelements in BaseX ? Please understand, I am C developer dealing with
> Linux kernel code most of the time so I am not really familiar with all
> the web application things.
> 
> Thanks and regards
> Harald Freudenberger


Hi Harald,

you probably have to use CDATA for the parser and single quotes(') for the 
shell.

```
$ cat file.xml 
<xml>
 <a>
   <b/>
 </a>
 <c/>
</xml>
```

```
$ curl -u admin:admin -X PUT -T 'file.xml' 'http://localhost:8984/rest/demo' 
Database 'demo' created in 11.45 ms.
```

```
$ curl -u admin:admin "http://localhost:8984/rest/demo"; -d '<query 
xmlns="http://basex.org/rest";><text> /xml </text></query>'
<xml>
  <a>
    <b/>
  </a>
  <c/>
</xml>
```

```
$ curl -i -u admin:admin "http://localhost:8984/rest/demo"; -d '<query 
xmlns="http://basex.org/rest";><text><![CDATA[ replace node /xml/a/b with <foo/> 
]]></text></query>'
HTTP/1.1 200 OK
Date: Fri, 30 Mar 2018 19:40:49 GMT
Content-Type: application/xml; charset=UTF-8
Content-Length: 0
Server: Jetty(9.4.8.v20171121)
```

```
$ curl -u admin:admin "http://localhost:8984/rest/demo"; -d '<query 
xmlns="http://basex.org/rest";><text> /xml </text></query>'
<xml>
  <a>
    <foo/>
  </a>
  <c/>
</xml>
```

```
$ curl -i -u admin:admin "http://localhost:8984/rest/demo"; -d '<query 
xmlns="http://basex.org/rest";><text>replace node /xml/c with 123</text></query>'
HTTP/1.1 200 OK
Date: Fri, 30 Mar 2018 19:42:02 GMT
Content-Type: application/xml; charset=UTF-8
Content-Length: 0
Server: Jetty(9.4.8.v20171121)
```

```
$ curl -u admin:admin "http://localhost:8984/rest/demo"; -d '<query 
xmlns="http://basex.org/rest";><text> /xml </text></query>'                      
   
<xml>
  <a>
    <foo/>
  </a>123</xml>
```

Hope this helps,
        Alex

Reply via email to