私はPythonに非常に慣れていないので、ある点に行き詰まっています。XML ドキュメントの選択ノードを MS SQL Server の対応する値に置き換えようとしています。同じことを達成するには、minidom のみを使用することになっています。データベース テーブルはユニコード化されたポーランド語のバイヤー情報で構成されており、既存の XML の英語情報をポーランド語データに置き換えることになっています。以下は、変更が発生するはずの XML ドキュメントの構造です。
<INVPARTNER>
<INVOICE_BUYER>XXXXX</INVOICE_BUYER> (Unique Customer ID)
<INVOICE_PAYERNO>92254</INVOICE_PAYERNO>
<INVOICE_BUYERVATID>BLAH</INVOICE_BUYERVATID>
<buyer1>ABC</buyer1> (Customer name 1: DB Value CUSTNAME1)
<buyer2/> (Customer name 2: DB Value CUSTNAME2)
<buyer3>XYZ</buyer3> (Customer name 3: DB Value CUSTADDR1)
<buyer4/> (Customer name 4: DB Value CUSTADDR2)
<buyer5>PQR</buyer5>
<buyer6>ITALY</buyer6>
<buyer7/>
<buyer8></buyer8>
<buyer9/>
<buyer10/>
私は同じことを達成するために次のコードを書きましたが、そうしませんでした:
import pyodbc
from xml.dom.minidom import parse
import os
docTypes = {'INVOICE':['INVOICE_BUYER', 'INVOICE_CONSIGNEE']}
changeValues = {'INVOICE':{"buyer1":'CUSTNAME1', "buyer2":'CUSTNAME2', "buyer3":'CUSTADDRESS1', "buyer4":'CUSTADDRESS2'}}
dom = parse("Print.xml")
type = dom.getElementsByTagName('DocumentID')[0].childNodes[0].nodeValue
print type
i = 0
CONN_STR = 'DSN=dsn;;DB=test_DB;UID=usr;PWD=passwrd'
db = pyodbc.connect(CONN_STR)
c = db.cursor()
print docTypes['INVOICE']
if docTypes.has_key(type):
#iterator = len(docTypes[type])
for i in range(0,len(docTypes[type])):
for tag in dom.getElementsByTagName(docTypes[type][i]):
name = tag.childNodes[0]
c.execute (u"select CUSTOMER, ADDRESSTYPE, CUSTNAME1, CUSTNAME2, CUSTADDRESS1, CUSTADDRESS2 from CUSTADDR_UC where 'CUSTOMER' = ('%u')", name.nodeValue)
rows = c.fetchall()
for key in changeValues[type].iterkeys():
print dom.getElementsByTagName(key)[0].toxml()
for row in rows:
if dom.getElementsByTagName(key)[0].toxml() is not None:
change = dom.getElementsByTagName(key)[0].toxml()
change.nodeValue = unicode(row.changeValue[type][key])
open("D:\\Shantanu\\done2.xml","w").write(dom.toxml("utf-8"))
コードにエラーはありませんが、ノード値も置き換えていません。ここで何か問題がある場合は、私を助けてもらえますか?