首页 > 解决方案 > 从 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&gt;</html_root></response>', )

正如您从我的代码中看到的那样,我尝试将其保存为字符串,但出现上述错误。如何从 SQL 中读取值并将其保存为 XML 项?出于隐私原因,对 XML 进行了编辑,但如果需要更多详细信息,请告诉我。

标签: pythonsql-serverxml

解决方案


我认为你不小心传递了一个行对象,而不是字符串ET.fromstring(str(row))

尝试:

tree = ET.ElementTree(ET.fromstring(str(row[0])))

根据pyodbc 文档,您还可以按名称引用列,例如row['XML'],而不是row[0]


推荐阅读