2017-09-02 91 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端部署。

相關問題