如何格式化 XML 响应 - Python
Posted
技术标签:
【中文标题】如何格式化 XML 响应 - Python【英文标题】:How can I format the XML response - Python 【发布时间】:2022-01-22 01:37:20 【问题描述】:我正在尝试从 XML 响应中获取一些值,但出现此错误。
为什么 json.loads 不起作用?
我所做的是将字节中的响应转换为 str。 然后使用负载格式化文件以获取值。
有没有人知道如何格式化这个回复?
从 None 提高 JSONDecodeError("Expecting value", s, err.value) json.decoder.JSONDecodeError:预期值:第 1 行第 1 列(字符 0)
这是我目前的代码。
import json, requests, urllib.parse, re
from termcolor import colored
import numpy as np
import sqlite3, math, jmespath, os
import pandas as pd
import xmltodict
# Set Up
dateinplay = "2021-11-29"
cdwenv1 = "cdwu" # Note that it only works with the http version right now
emberEndPoint = "http://emberu:8084/ember/v2/hierarchy/"
tempdir = r"J:\E2E Testing Service\2.- Improvement\ALP Project"
dbname = f"tempdir\\ALP.sqlite"
batchsize = 3000
conn = sqlite3.connect(dbname)
# Dev Static
cdwenv = "" # leave empty
# Create a list of all books from Ember
emberRaw = requests.get(emberEndPoint + dateinplay).text
ember_str = str(emberRaw).encode("cp850", "replace").decode("cp850")
emberJsonObj = json.loads(ember_str)
# print(emberJsonObj)
XML 响应:
<cmfHierarchy reportingDateTime="2021-12-20T03:04:39.028+00:00" asOfDate="2021-11-29+00:00">
<unit unitValidToDate="9999-12-31Z" unitValidFromDate="2019-10-30Z" orderBy="2" unitEndDate="9999-12-31Z" unitStartDate="1900-01-01Z" status="Active" categoryName="Legal Entity" categoryCode="LE" name="Mizuho Securities Group" code="MHSC" id="LE0MHSC">
<identifiers>
<identifier value="2278" name="UnitId" system="MiCore"></identifier>
</identifiers>
<unit unitValidToDate="9999-12-31Z" unitValidFromDate="2019-10-30Z" orderBy="3" parentCategoryName="Legal Entity" parentCode="MHSC" unitEndDate="9999-12-31Z" unitStartDate="1900-01-01Z" parent="LE0MHSC" status="Active" categoryName="Legal Entity" categoryCode="LE" name="MSUK Holdings Group" code="MSUKG" id="LEMSUKG">
<identifiers>
<identifier value="2291" name="UnitId" system="MiCore"></identifier>
</identifiers>
<unit unitValidToDate="9999-12-31Z" unitValidFromDate="2019-10-30Z" orderBy="8690" parentCategoryName="Legal Entity" parentCode="MSUKG" unitEndDate="9999-12-31Z" unitStartDate="2009-12-01Z" oracleCode="72701" parent="LEMSUKG" status="Active" categoryName="Legal Entity" categoryCode="LE" name="Mizuho International" code="MHI" id="LE00MHI">
<identifiers>
<identifier value="2059" name="UnitId" system="MiCore"></identifier>
</identifiers>
<unit unitValidToDate="9999-12-31Z" unitValidFromDate="2019-10-30Z" orderBy="6995" parentCategoryName="Legal Entity" parentCode="MHI" unitEndDate="9999-12-31Z" unitStartDate="2011-04-01Z" parent="LE00MHI" status="Active" categoryName="Division" categoryCode="DV" name="Central" code="00021" id="DV00021">
<identifiers>
<identifier value="2706" name="UnitId" system="MiCore"></identifier>
</identifiers>
<unit unitValidToDate="9999-12-31Z" unitValidFromDate="2019-10-30Z" orderBy="6996" parentCategoryName="Division" parentCode="00021" unitEndDate="9999-12-31Z" unitStartDate="2011-04-01Z" parent="DV00021" status="Active" categoryName="Business" categoryCode="BU" name="Central" code="00184" id="BU00184">
<identifiers>
<identifier value="2707" name="UnitId" system="MiCore"></identifier>
</identifiers>
<unit unitValidToDate="9999-12-31Z" unitValidFromDate="2019-10-30Z" orderBy="6997" parentCategoryName="Business" parentCode="00184" unitEndDate="9999-12-31Z" unitStartDate="2011-04-01Z" parent="BU00184" status="Active" categoryName="Department" categoryCode="DP" name="Central" code="00174" id="DP00174">
<identifiers>
<identifier value="2708" name="UnitId" system="MiCore"></identifier>
</identifiers>
<unit unitValidToDate="9999-12-31Z" unitValidFromDate="2019-10-30Z" orderBy="7068" parentCategoryName="Department" parentCode="00174" unitEndDate="9999-12-31Z" unitStartDate="2011-04-01Z" oracleCode="STR-0134" parent="DP00174" status="Active" categoryName="Cost Centre" categoryCode="CC" name="International Dept" code="0134" id="CC00134">
<identifiers>
<identifier value="2709" name="UnitId" system="MiCore"></identifier>
</identifiers>
</unit>
</unit>
</unit>
</unit>
【问题讨论】:
b'' 表示它是一个字节串。你可以 .encode() 这个来创建 utf-8 【参考方案1】:XML 前面的'b'
表示您正在打印的数据类型是字节数组(不是字符串)。
如果你想漂亮地打印你的 XML,你可以用 XML 解析器解析它,然后像这样漂亮地打印它:
import lxml.etree as etree
from io import BytesIO
fp = BytesIO(emberObj)
x = etree.parse(fp)
print(etree.tostring(x, pretty_print=True))
【讨论】:
以上是关于如何格式化 XML 响应 - Python的主要内容,如果未能解决你的问题,请参考以下文章