在Python中从mssql解码XML对象

时间:2016-10-27 13:50:59

标签: python sql-server xml

当我从Python(2.7)调用SP时,我从mssql服务器返回一个XML对象。我得到以下形式:

{u'XML_F52E2B61-18A1-11d1-B105-00805F49916B': 'D\x02i\x00d\x00D\x05d\x00e\x00s\x00c\x00r\x00D\x0bd\x00a\x00t\x00a\x00t\x00y\x00p\x00e\x00_\x00i\x00d\x00D\x13e\x00n\x00u\x00m\x00e\x00r\x00a\x00t\x00i\x00o\x00n\x00_\x00t\x00y\x00p\x00e\x00_\x00i\x00d\x00D\rs\x00y\x00s\x00t\x00e\x00m\x00f\x00e\x00a\x00t\x00u\x00r\x00e\x00D\x04l\x00i\x00n\x00k\x00D\x07F\x00e\x00a\x00t\x00u\x00r\x00e\x00\x01\x00\x08F\x00e\x00a\x00t\x00u\x00r\x00e\x00S\x00A\x01\x07A\x01\x01A\x03B\x01\x00\x00\x00\x81\x01\x01\x02A\x03\x11\x1a\x00r\x00e\x00s\x00p\x00o\x00n\x00d\x00e\x00n\x00t\x00_\x00i\x00d\x00\x81\x02\x01\x03A\x03B\x01\x00\x00\x00\x81\x03\x01\x05A\x03F\x01\x81\x05\x01\x06A\x03F\x00\x81\x06\x81\x07\x01\x07A\x01\x01A\x03B\x02\x00\x00\x00\x81\x01\x01\x02A\x03\x11 \x00W\x00o\x00r\x00k\x00s\x00 \x00a\x00t\x00 \x00c\x00o\x00m\x00p\x00a\x00n\x00y\x00\x81\x02\x01\x03A\x03B\x01\x00\x00\x00\x81\x03\x01\x05A\x03F\x01\x81\x05\x01\x06A\x03F\x01\x81\x06\x81\x07\x01\x07A\x01\x01A\x03B\x03\x00\x00\x00\x81\x01\x01\x02A\x03\x11\x0c\x00G\x00e\x00n\x00d\x00e\x00r\x00\x81\x02\x01\x03A\x03B\x08\x00\x00\x00\x81\x03\x01\x04A\x03B\x01\x00\x00\x00\x81\x04\x01\x05A\x03F\x00\x81\x05\x01\x06A\x03F\x00\x81\x06\x81\x07\x81\x00\x08F\x00e\x00a\x00t\x00u\x00r\x00e\x00S\x00'}

我有两个问题:

  • 1:这是什么编码?
  • 2:我应该用什么库来解码?

增加:

SQL Management Studio中显示的XML:

enter image description here

SP:

ALTER PROCEDURE [dbo].[rdb_sql2python]

AS
BEGIN
    SET NOCOUNT ON
    SELECT * FROM [_rdb].[dbo].[features] FOR XML RAW ('Feature'), ROOT ('FeatureS'), ELEMENTS
    SET NOCOUNT OFF
END

1 个答案:

答案 0 :(得分:1)

我尝试回答的问题,至少问题是:这是什么:

在您提供的this JSON-viewer字符串中,它无效。但当我删除" u"时,用双引号替换单引号并删除" D"它以某种方式起作用:

此字符串

  

{" XML_F52E2B61-18A1-11d1-B105-00805F49916B&#34 ;:   " \ x02i \ x00d \ x00D \ x05d \ x00e \ x00s \ x00c \ x00r \ x00D \ x0bd \ X00A \ x00t \ X00A \ x00t \ x00y \ x00p \ x00e \ x00_ \ x00i \ x00d \ x00D \ x13e \ x00n \ x00u \ x00m \ x00e \ x00r \ X00A \ x00t \ x00i \ x00o \ x00n \ x00_ \ x00t \ x00y \ x00p \ x00e \ x00_ \ x00i \ x00d \ x00D \ RS \ x00y \ x00s \ x00t \ x00e \ x00m \ x00f \ x00e \ X00A \ x00t \ x00u \ x00r \ x00e \ x00D \ x04l \ x00i \ x00n \ x00k \ x00D \ x07F \ x00e \ X00A \ x00t \ x00u \ x00r \ x00e \ X00 \ X01 \ X00 \ x08F \ x00e \ X00A \ x00t \ x00u \ x00r \ x00e \ x00S \ X00A \ X01 \ x07A \ X01 \ x01A \ x03B \ X01 \ X00 \ X00 \ X00 \ X81 \ X01 \ X01 \ x02A \ X03 \ X11 \ X1A \ x00r \ x00e \ x00s \ x00p \ x00o \ x00n \ x00d \ x00e \ x00n \ x00t \ x00_ \ x00i \ x00d \ X00 \ X81 \ X02 \ X01 \ x03A \ x03B \ X01 \ X00 \ X00 \ X00 \ X81 \ X03 \ X01 \ x05A \ x03F \ X01 \ X81 \ X05 \ X01 \ x06A \ x03F \ X00 \ X81 \ X06 \ X81 \ X07 \ X01 \ x07A \ X01 \ x01A \ x03B \ X02 \ X00 \ X00 \ X00 \ X81 \ X01 \ X01 \ x02A \ X03 \ X11   \ x00W \ x00o \ x00r \ x00k \ x00s \ x00 \ x00a \ x00t \ x00   \ x00c \ x00o \ x00m \ x00p \ X00A \ x00n \ x00y \ X00 \ X81 \ X02 \ X01 \ x03A \ x03B \ X01 \ X00 \ X00 \ X00 \ X81 \ X03 \ X01 \ x05A \ x03F \ X01 \ X81 \ X05 \ X01 \ x06A \ x03F \ X01 \ X81 \ X06 \ X81 \ X07 \ X01 \ x07A \ X01 \ x01A \ x03B \ X03 \ X00 \ X00 \ X00 \ X81 \ X01 \ X01 \ x02A \ X03 \ X11 \ X0C \ x00G \ x00e \ x00n \ x00d \ x00e \ x00r \ X00 \ X81 \ X02 \ X01 \ x03A \ x03B \ X08 \ X00 \ X00 \ X00 \ X81 \ X03 \ X01 \ x04A \ x03B \ X01 \ X00 \ X00 \ X00 \ X81 \ X04 \ X01 \ x05A \ x03F \ X00 \ X81 \ X05 \ X01 \ x06A \ x03F \ X00 \ X81 \ X06 \ X81 \ X07 \ X81 \ X00 \ x08F \ x00e \ X00A \ x00t \ x00u \ x00r \ x00e \ x00S \ X00"}

转换为

Name: XML_F52E2B61-18A1-11d1-B105-00805F49916B
Value: "idDdescrDdatatype_idDenumeration_type_idD systemfeatureDlinkDFeatureFeatureSAAABArespondent_idABAFAFAABA Works at companyABAFAFAABAGenderABABAFAFFeatureS"

这是 - 当然 - 不是最终解决方案,但很明显,这是BSON编码的JSON。

显示你(r)SP的相关部分以及你调用它的方式可能是一个好主意。可能会有一种完全不同/更好的方法......