2017-09-02 72 views
1

我想从字符串插入一个xml节点到BaseX XML-DB中的现有xml文件到现有的xml节点中。如何将节点插入到Python客户端的baseX数据库内的XML文件中的现有节点?

这个工作从BaseX编辑器,但它从BaseX Python客户端失败。

其他查询正在使用python。

我的XML DB中前:
mydata.xml

<a/> 

在BaseX编辑器中执行:

let $col := collection("mydb/mypath/mydata.xml") 
let $inp := "<b><c>My Content</c></b>" 
for $doc in $col 
return insert node fn:parse-xml($inp) into $doc//a 

结果XML:
mydata.xml

<a> 
    <b> 
    <c>My Content</c> 
    </b> 
</a> 

这工作正常。

但是,如果我做同样的从Python客户端,我在DB XML是不变:

在Python:

session = BaseXClient.Session(DB_HOST, DB_PORT, DB_USER, DB_PASS) 
session.execute("open mydb") 
query = session.query(
""" 
    let $col := collection("mydb/mypath/mydata.xml") 
    let $inp := "<b><c>My Content</c></b>" 
    for $doc in $col 
    return insert node fn:parse-xml($inp) into $doc//a 
""") 

结果: mydata.xml

<a/> 

的在Python中的DB会话工作,我可以做其他查询没有问题。

所以我不知道什么问题就在这里,不会发生错误。但是节点没有插入。

如何插入我和节点与现有节点此节点内的现有mydata.xml我从蟒蛇的内容?

谢谢!

回答

0

试试这个:当你工作的Python脚本,例如同时为baseX打开数据库

try: 
    session = BaseXClient.Session(DB_HOST, DB_PORT, DB_USER, DB_PASS) 
    query = 'let $col := collection("mydb/mypath/mydata.xml") ' \ 
      'let $inp := "<b><c>My Content</c></b>" ' \ 
      'for $doc in $col ' \ 
      'return insert node fn:parse-xml($inp) into $doc//a' 
    queryObject = session.query(query) 
    queryObject.execute() 
    queryObject.close() 

finally: 
    if session: 
     session.close() 

不要运行此脚本,就像BaseX GUI开幕。

确保你总是试图先在GUI查询(在一个虚拟的数据库),然后在Python端部署。

相关问题