Python 如何使用名称空间从xml文件中提取值?
我有如下所示的xml文件,其中包含名称空间,我正试图为其提取Python 如何使用名称空间从xml文件中提取值?,python,xml,xml-parsing,xml-namespaces,elementtree,Python,Xml,Xml Parsing,Xml Namespaces,Elementtree,我有如下所示的xml文件,其中包含名称空间,我正试图为其提取Node24 我当前的代码如下,没有打印任何内容: import xml.etree.ElementTree as ET filename = 'ifile.xml' tree = ET.parse(filename) root = tree.getroot() for neighbor in root.iter('Node24'): print(neighbor) 我的预期产出是: 03-c34ko 04-c64ko 0
Node24
我当前的代码如下,没有打印任何内容:
import xml.etree.ElementTree as ET
filename = 'ifile.xml'
tree = ET.parse(filename)
root = tree.getroot()
for neighbor in root.iter('Node24'):
print(neighbor)
我的预期产出是:
03-c34ko
04-c64ko
07-c54ko
最重要的是ifile.xml
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<data-main-43:DATAMAINXZ123 xmlns="https://example.com/DATA-MAIN-XZ123" xmlns:data-gen="https://example.com/DATA-GEN" xmlns:data-main-43="https://example.com/DATA-MAIN-XZ123" xmlns:xsi="http://www.w3.org/2011/XMLSchema-instance" xsi:schemaLocation="https://example.com/DATA-MAIN-XZ123 data-main-ir21-12.1.xsd">
<MAINXZ123FileHeader>
<DATAGenSchemaVersion>2.4</DATAGenSchemaVersion>
<DATAMAINXZ123SchemaVersion>12.1</DATAMAINXZ123SchemaVersion>
</MAINXZ123FileHeader>
<Node1>
<Node2>WTRT DDK</Node2>
<Node3>XYZW</Node3>
<Node4>
<Node5>
<Node6>XYZW882</Node6>
<Node5Type>Ter</Node5Type>
<Node5Data>
<Node9>
<Node10>
<Node11>2019-02-18</Node11>
<Node12>
<Node13>
<Node14>
<Node15>Ermso</Node15>
<Node16>
<PrimaryNode16>
<Node18>19.32</Node18>
<Node18>12.11</Node18>
</PrimaryNode16>
<SecondaryNode16>
<Node18>82.97</Node18>
<Node18>12.41</Node18>
</SecondaryNode16>
</Node16>
<Node20>Muuatippw</Node20>
</Node14>
</Node13>
</Node12>
<Node21>
<Node22>
<Node23>
<Node24>03-c34ko</Node24>
<Node24>04-c64ko</Node24>
<Node24>07-c54ko</Node24>
</Node23>
<Node26Node22EdgeAgent>
<Node26>jjkksonem</Node26>
<PrimaryNode18DEANode26>
<Node18>2.40</Node18>
</PrimaryNode18DEANode26>
</Node26Node22EdgeAgent>
</Node22>
</Node21>
<Node28>
<Node29>
<Node30>false</Node30>
<Node31>true</Node31>
</Node29>
</Node28>
</Node10>
</Node9>
</Node5Data>
</Node5>
</Node4>
</Node1>
</data-main-43:DATAMAINXZ123>
2.4
12.1
WTRT-DDK
XYZW
XYZW882
特
2019-02-18
埃尔姆索
19.32
12.11
82.97
12.41
Muuatippw
03-c34ko
04-c64ko
07-c54ko
jjkksonem
2.40
假的
真的
我该怎么做?提前感谢。我正在使用正则表达式,所以这是另一个答案。 我将xml转换为字符串,然后搜索节点24之间的所有字符串
import xml.etree.ElementTree as ET
import re
filename = 'ifile.xml'
tree = ET.parse(filename)
root = tree.getroot()
xml_str = ET.tostring(root)
for s in re.findall(r'ns0:Node24>(.*?)</ns0:Node24', str(xml_str)):
print(s)
我用的是正则表达式,所以这是另一个答案。 我将xml转换为字符串,然后搜索节点24之间的所有字符串
import xml.etree.ElementTree as ET
import re
filename = 'ifile.xml'
tree = ET.parse(filename)
root = tree.getroot()
xml_str = ET.tostring(root)
for s in re.findall(r'ns0:Node24>(.*?)</ns0:Node24', str(xml_str)):
print(s)
就像,只需将名称空间uri添加到元素名称中
import xml.etree.ElementTree as ET
filename = 'ifile.xml'
tree = ET.parse(filename)
root = tree.getroot()
for neighbor in root.iter('{https://example.com/DATA-MAIN-XZ123}Node24'):
print(neighbor.text)
注意:我还将.text
添加到了邻居
,这样您就可以得到请求的结果。就像,只需将名称空间uri添加到元素名中
import xml.etree.ElementTree as ET
filename = 'ifile.xml'
tree = ET.parse(filename)
root = tree.getroot()
for neighbor in root.iter('{https://example.com/DATA-MAIN-XZ123}Node24'):
print(neighbor.text)
注意:我还将
.text
添加到了邻居
,这样您就可以得到请求的结果。谢谢您的帮助。它似乎起作用了。但是如果我想提取更多的元素,我需要更改正则表达式中的节点?另一个问题是,什么是ns0:…
?当您可以打开open(“ifile.XML”).read()
并假装没有默认名称空间时,为什么还要麻烦解析为XML?在大多数情况下,在XML或HTML上使用正则表达式不是一个好主意@我不明白你的意思,呵呵。您建议如何提取节点24的值?如果正则表达式不是个好主意…@mzjn我看到了。在那个链接中,他们谈到使用regex解析是不好的,那个线程中的其他人说“不要听这些家伙的话”,但我的问题没有解决方案。谢谢你们的帮助。它似乎起作用了。但是如果我想提取更多的元素,我需要更改正则表达式中的节点?另一个问题是,什么是ns0:…
?当您可以打开open(“ifile.XML”).read()
并假装没有默认名称空间时,为什么还要麻烦解析为XML?在大多数情况下,在XML或HTML上使用正则表达式不是一个好主意@我不明白你的意思,呵呵。您建议如何提取节点24的值?如果正则表达式不是个好主意…@mzjn我看到了。在那个链接中,他们说用正则表达式解析是不好的,那个帖子中的其他人说“不要听这些家伙的话”,但我的问题没有解决办法。这看起来像是重复了感谢分享的链接。我会检查它这看起来像是一个重复的感谢链接共享。我去查一下