在Python中使用XMLPullParser解析XML流

2024-10-02 10:30:17 发布

您现在位置:Python中文网/ 问答频道 /正文

这是我第一次在这里提问,我是个新手,如果我的问题听起来有些愚蠢,我很抱歉。 我正在处理来自机器的流式数据:

requests.get('http://IP:port/sample?interval=0&heartbeat=1000', stream = True)

我正在接收XML格式的数据。XML数据的结构如下:

b'--9bc1ad19bf9e3b4049ab7e4f78dda451'
b'Content-type: text/xml'
b'Content-length: 15560'
b'<?xml version="1.0" encoding="UTF-8"?>'
b'<MTConnectStreams xmlns:m="urn:mtconnect.org:MTConnectStreams:1.3"  xmlns="urn:mtconnect.org:MTConnectStreams:1.3" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:mtconnect.org:MTConnectStreams:1.3 http://www.mtconnect.org/schemas/MTConnectStreams_1.3.xsd">'
b'  <Header creationTime="2016-12-01T17:58:48Z" sender="MAZATROL-PC" instanceId="1480604825" version="1.3.0.17" bufferSize="131072" nextSequence="1301" firstSequence="1" lastSequence="42044"/>'
b'  <Streams>'
b'    <DeviceStream name="Mazak" uuid="Mazak">'
b'      <ComponentStream component="Controller" name="controller" componentId="cont">'
b'        <Samples>'
b'          <AccumulatedTime dataItemId="yltime" timestamp="2016-12-01T15:45:15.662995Z" name="total_time" sequence="1214" subType="x:TOTAL">3104040</AccumulatedTime>'
b'          <AccumulatedTime dataItemId="yltime" timestamp="2016-12-01T15:46:16.452858Z" name="total_time" sequence="1243" subType="x:TOTAL">3104101</AccumulatedTime>'
b'          <AccumulatedTime dataItemId="yltime" timestamp="2016-12-01T15:47:17.331808Z" name="total_time" sequence="1272" subType="x:TOTAL">3104162</AccumulatedTime>'
b'          <PathFeedrateOverride dataItemId="pfo" timestamp="2016-12-01T15:33:27.042482Z" name="Fovr" sequence="899" subType="ACTUAL">0</PathFeedrateOverride>'
b'          <PathFeedrateOverride dataItemId="pfr" timestamp="2016-12-01T15:30:26.700817Z" name="Frapidovr" sequence="803" subType="RAPID">0</PathFeedrateOverride>'
b'          <PathFeedrateOverride dataItemId="pfr" timestamp="2016-12-01T15:30:42.685031Z" name="Frapidovr" sequence="810" subType="RAPID">0</PathFeedrateOverride>'

我只想从包含dataItemId的行中获取一些信息。 我这样做只是为了打印数据:

^{pr2}$

知道速度是非常关键的,因为我们希望在AWS数据库中访问实时数据。 我不知道该如何以最好的方式进行分析。根据我的发现,使用XmlPullParser是解析流数据而不阻塞的最佳方法。但是,我不知道“开始”和“结束”应该是什么。 我真的不知道该如何在不丢失任何数据和保证我正在解析所有内容的情况下继续操作。我正在考虑使用一个线程来接收数据,另一个线程使用XmlPullParser解析数据,一旦数据被放入json格式并发送出去,该行就会从树中删除。但是由于我没有一个包含子节点的树结构,如果我只想解析具有dataItemId的行,我不清楚它应该如何工作。 非常感谢你的帮助。 谢谢你


Tags: 数据nameorghttptimestampsequencexmlnsurn
1条回答
网友
1楼 · 发布于 2024-10-02 10:30:17

代替使用你想要的库的答案,让我给你指出另一个类似的方向。由于您正在寻找两个特定的标记,因此一个简单的方法将类似于在thispost中,只有您的支票必须是

if element.tag=="tag1" or element.tag=="tag2"

您也可以检查SAX并遵循相同的逻辑。如果您是在考虑速度的情况下这样做的,那么对它进行分析,并在速度和空间方面保持最适合您需求的实现。在

另请参见post

相关问题 更多 >

    热门问题