python - 从 SQL Server 导入的字符串解析 XML
问题描述
我从 SQL Server 导入了一个查询,其中项目是存储的 XML 脚本。它被保存为 pyodbc 项目,我需要将其解析为 XML。
import pyodbc
import urllib
import xml.etree.ElementTree as ET
# Create connection
con = pyodbc.connect(driver="{SQL Server}",server="Server",database="Database")
cur = con.cursor()
db_cmd = "SELECT [XML] FROM [Database].[dbo].[Table] where ID = 1"
res = cur.execute(db_cmd)
for row in res.fetchall():
print(row)
tree = ET.ElementTree(ET.fromstring(str(row)))
我不断收到此错误:
Traceback (most recent call last):
File "C:...", line 2961, in run_code
exec(code_obj, self.user_global_ns, self.user_ns)
File "<ipython-input-46-1e4a5c1ba170>", line 15, in <module>
tree = ET.ElementTree(ET.fromstring(str(row)))
File "C:...", line 1315, in XML
parser.feed(text)
File "<string>", line unknown
ParseError: syntax error: line 1, column 0
我猜测 XML 脚本存在问题,但我对 XML 的了解不够,无法确定问题所在。这是脚本的摘录:
('<response error_code="0"><xml_root><report xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<report_options>...;/html></html_root></response>', )
正如您从我的代码中看到的那样,我尝试将其保存为字符串,但出现上述错误。如何从 SQL 中读取值并将其保存为 XML 项?出于隐私原因,对 XML 进行了编辑,但如果需要更多详细信息,请告诉我。
解决方案
我认为你不小心传递了一个行对象,而不是字符串ET.fromstring(str(row))
尝试:
tree = ET.ElementTree(ET.fromstring(str(row[0])))
根据pyodbc 文档,您还可以按名称引用列,例如row['XML']
,而不是row[0]
推荐阅读
- mysql - 将 innodb 数据库的一些表加载到 mariadb 的内存中
- python-2.7 - Apache Spark 中 RDD 方法 persist() 和 cache() 的默认持久性级别是多少
- angular - 为面包屑Angular 6寻找路线儿童
- https - GitHub Pages 自定义域未显示非顶级域的 HTTPS 证书
- database - 忘记 *fdb (firebird) 数据库的用户名和密码。无论如何我可以破解这个数据库吗?
- android - com.android.builder.internal.aapt.v2.Aapt2Exception: 更新android studio后Android资源编译失败
- java - Java:获取通用供应商返回对象的类类型
- php - 如何为 yii2 编写 SQL 查询?“内部联接”
- unix - 文件从远程 linux 服务器传输到 Hadoop HDFS
- php - consecutive occurrence of character