【发布时间】:2022-12-19 19:34:04
【问题描述】:
我用 lxml 库编写了一个 python 程序来使用它的 xpath 解析一个 xml 文件。值和 xpath 都是正确的,但它返回许多 '\n' 和空格,就像 xml 文件的格式一样。
这是我的代码:
from lxml import etree
from xml.dom import minidom
#data = minidom.parse('D:/LocalSpark/bitmap.xml')
sigxml = etree.parse('D:/LocalSpark/bitmap.xml',etree.XMLParser(remove_blank_text=True, load_dtd=True))
xpath = '/OneMessage[@Name="NR RRCReconfiguration"]/BalongMessage/Content/L3MessageContent/DL-DCCH-Message/message/c1/rrcReconfiguration/criticalExtensions/rrcReconfiguration/measConfig/measObjectToAddModList/MeasObjectToAddMod/measObject/measObjectNR/referenceSignalConfig/ssb-ConfigMobility/ssb-ToMeasure/setup/mediumBitmap'
info = 10000000
for node in sigxml.xpath(xpath):
print('node: ', node)
print('node.tag: ',node.tag)
print('node.text:',node.text)
print('node.item:',node.items())
print('node.attrib:',node.attrib)
if info == node.text:
print("%s info do exist!"%info)
else:
print("%s info do not exist!!!"%info)
这是 xml 文件:
<OneMessage Name="NR RRCReconfiguration" MsgTimeStamp="1668594368290"><BalongMessage><Header><usRsvd>4608</usRsvd><ucbMdmId>0</ucbMdmId><ucbMsgType>3</ucbMsgType><ucbRsvd>0</ucbRsvd><ulMsgClsID>26080000</ulMsgClsID><ullbTimeStamp>1853637.763054</ullbTimeStamp><ullbCpuTransID>38693</ullbCpuTransID><usSocpTransID>20388</usSocpTransID><ullLocalTime>133129368818699187</ullLocalTime><ulTransNo>6107</ulTransNo><ulSendPID>131072</ulSendPID><ulRecvPID>0</ulRecvPID><ulPrimID>00000003</ulPrimID><ucbOtaDirect>DL(1)</ucbOtaDirect><ucbPrintLevel>63</ucbPrintLevel><ulDataSize>56</ulDataSize></Header><Content><L3MessageContent><DL-DCCH-Message>
<message>
<c1>
<rrcReconfiguration>
<criticalExtensions>
<rrcReconfiguration>
<measConfig>
<measObjectToAddModList>
<MeasObjectToAddMod>
<measObject>
<measObjectNR>
<referenceSignalConfig>
<ssb-ConfigMobility>
<ssb-ToMeasure>
<setup>
<mediumBitmap>
10000000
</mediumBitmap>
</setup>
</ssb-ToMeasure>
</ssb-ConfigMobility>
</referenceSignalConfig>
</measObjectNR>
</measObject>
</MeasObjectToAddMod>
</measObjectToAddModList>
</measConfig>
</rrcReconfiguration>
</criticalExtensions>
</rrcReconfiguration>
</c1>
</message>
</DL-DCCH-Message>
</L3MessageContent></Content></BalongMessage></OneMessage>
这是结果:
node: <Element mediumBitmap at 0x22e3c645f80>
node.tag: mediumBitmap
node.text:
10000000
node.item: []
node.attrib: {}
10000000 info do not exist!!!
我的问题是代码显然可以读取并找到 mediumBitmap 这个元素,但是正如它在 xml 文件中显示的那样,它前后都有 \n 。所以当程序继续时,它返回 mediumBitmap 的文本值是
\n 10000000 \n
但不只是10000000
它是项目中的标准 xml,因此我无法对其进行编辑。
我试图添加remove_blank_text=True来解析或使用minidom
都失败了
【问题讨论】:
标签: python python-3.x xml-parsing lxml elementtree