繁体   English   中英

将自定义 XML 解析为 JSON 或 Pandas DataFrame。 (蟒蛇)

[英]Parse custom XML to JSON or Pandas DataFrame. (Python)

以下是我的xml文档。

<BizTalk xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"     xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Body>
<QUEUE>
  <FILTER FILTERNAME="CorrectAddress" VALUE="1" />
  <FILTER FILTERNAME="DaysSinceLastTracking" VALUE="0" />
  <FILTER FILTERNAME="DaysSinceShipped" VALUE="3" />
  <FILTER FILTERNAME="DaysUntilDelivered" VALUE="735101" />
  <FILTER FILTERNAME="DeliveryStatus" VALUE="IN_TRANSIT" />
  <FILTER FILTERNAME="Division" VALUE="71" />
  <FILTER FILTERNAME="EmptyBox" VALUE="0" />
  <FILTER FILTERNAME="FedVendInstructions" VALUE="" />
  <FILTER FILTERNAME="ItemDescription" VALUE="bla bla bla" />
  <FILTER FILTERNAME="ItemIssue" VALUE="Damaged" />
  <FILTER FILTERNAME="ItemValue" VALUE="50" />
  <FILTER FILTERNAME="PiecedSet" VALUE="0" />
  <FILTER FILTERNAME="HasProofOfDelivery" VALUE="0" />
  <FILTER FILTERNAME="RecievedPOD" VALUE="0" />
  <FILTER FILTERNAME="RequestedAction" VALUE="Reship" />
  <FILTER FILTERNAME="HasReturntracking" VALUE="0" />
  <FILTER FILTERNAME="IsStandardFillLocation" VALUE="1" />
  <FILTER FILTERNAME="Tampered" VALUE="0" />
  <FILTER FILTERNAME="HasTracking" VALUE="1" />
  <FILTER FILTERNAME="ShortName" VALUE="BDD" />
  <FILTER FILTERNAME="IsBOPS" VALUE="0" />
  <FILTER FILTERNAME="WrongItemType" VALUE="" />
</QUEUE>
<RESPONSEDATA>
  <ITEMS>
    <DATA CanReOrder="1" UPC="xxxxxxx" Quantity="1" LineNumber="1" Description="bla bla bla" />
  </ITEMS>
  <DATA ITEM="Reservation" VALUE="????????" />
  <DATA ITEM="ShipmentNumber" VALUE="1" />
  <DATA ITEM="ContactedBy" VALUE="Shipping Customer" />
  <DATA ITEM="PackageRecieved" VALUE="1" />
  <DATA ITEM="CheckedEverywhere" VALUE="0" />
</RESPONSEDATA>

如何将此自定义 XML 转换为 Pandas DataFrame?

我尝试了一些使用 xmljson 的预定义覆盖,这会引发错误“str 对象没有属性标签”

我尝试使用 ELEmentTree 并将元素树对象列表传递给 Pandas,它会抛出空的 Dataframe:

etree = ET.fromstring(xml_data)
df = pd.DataFrame(list(etree))
print(df)

我目前正计划编写自定义解析器,它将FilterName作为列名,将 Value 作为其字段,但这是硬编码。 我想以后避免这种事情,好像添加了更多字段,我必须手动添加它们,这很麻烦。

有什么方法可以遍历每一行(可以使用 Loop with Open 来完成)。 并动态地向 Pandas DataFrame 添加列?

或者有什么有效的方法?

注意:我在W3Schools上检查了 XML 的有效性,它说没有发现错误,所以我相信 XML 是有效的。

谢谢

酷,我找到了解决方案。 我做了以下事情:

df = pd.DataFrame()

etree = ET.fromstring(xml_data)
# root = etree.getroot()
for node in etree.findall('.//FILTER'):
    parent = node.attrib.get('FILTERNAME')
    child = node.attrib.get('VALUE')

    col_name = parent
    val = child

    df[col_name] = [val]

打印(df)

只是想发帖,让任何人都面临类似的问题,它可以有所帮助。 谢谢

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM