我正在尝试为一个项目读取一些xml数据,但它就是不起作用。。。我有以下代码(使用的xml文件如下所示):
import time
from xml.etree.ElementTree import fromstring, ElementTree
import xml.etree.ElementTree as ET
ET.register_namespace('', "http://www.w3.org/2001/XMLSchema-instance")
ET.register_namespace('', "http://bison.connekt.nl/tmi8/kv6/msg")
while True:
print("--------------------------------------------")
tree = ET.parse("RET.xml")
root = tree.getroot()
print(root)
for debug in root.findall(".//"):
print(debug.text)
for line in root.findall('.Version'):
print(line.text)
print("--------------------------------------------")
time.sleep(5)
它成功地找到了所有元素的内容,但是当我搜索像“Version”这样的特定元素时,它不会返回任何内容。这是电流输出:
<Element '{http://bison.connekt.nl/tmi8/kv6/msg}VV_TM_PUSH' at 0x03D775A0>
RET
BISON 8.1.1.0
KV6posinfo
2020-12-04T21:22:56.1275145+01:00
ttt
RET
M007
2020-12-04
200180
0
HA8215
0
2020-12-04T21:22:56.1119143+01:00
SERVER
0
-920
--------------------------------------------
这是使用过的XML文件:
<?xml version="1.0" encoding="utf-8"?>
<VV_TM_PUSH xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://bison.connekt.nl/tmi8/kv6/msg">
<SubscriberID>
RET</SubscriberID><Version>
BISON 8.1.1.0</Version>
<DossierName>KV6posinfo</DossierName>
<Timestamp>2020-12-04T21:22:56.1275145+01:00</Timestamp>
<KV6posinfo>ttt
<ONSTOP>
<dataownercode>RET</dataownercode>
<lineplanningnumber>M007</lineplanningnumber>
<operatingday>2020-12-04</operatingday>
<journeynumber>200180</journeynumber>
<reinforcementnumber>0</reinforcementnumber>
<userstopcode>HA8215</userstopcode>
<passagesequencenumber>0</passagesequencenumber>
<timestamp>2020-12-04T21:22:56.1119143+01:00</timestamp>
<source>SERVER</source>
<vehiclenumber>0</vehiclenumber>
<punctuality>-920</punctuality>
</ONSTOP>
</KV6posinfo>
</VV_TM_PUSH>
为了测试,我在标签中添加了“ttt”
有人能帮忙吗
我发现您的代码中有两个缺陷:
for line in root.findall('.Version'):
行中有不必要的点。 请注意,Version是根元素的直接descenant,因此 只需输入标记名就足够了(事实上,不仅如此,后面还有详细信息)李>print(line.text)
行没有缩进,所以实际上应该有 收到一个编译错误李>如何正确使用名称空间的XML:
请注意,输入文件包含默认名称空间 (http://bison.connekt.nl/tmi8/kv6/msg)
然后,如果要引用此命名空间中的任何元素,必须:
因此,在您的情况下,将相应的代码片段替换为:
我添加了版本:以指示已打印的内容
也考虑打印EM>Le.Text .Studio()EME>,因为您的标签具有领先性。 换行符
相关问题 更多 >
编程相关推荐