使用 minidom 解析 python 中的 XML
Parsing XML in python using minidom
我有一个 XML 如下;
<root>
<entry>
<accession>A</accession>
<accession>B</accession>
<accession>C</accession>
<feature type="cross-link" description="sumo2">
<location>
<position position="15111992"/>
</location>
</feature>
<feature type="temp" description="blah blah sumo">
<location>
<position position="12345"/>
</location>
</feature>
</entry>
<entry>
<accession>X</accession>
<accession>Y</accession>
<accession>Z</accession>
<feature type="test" description="testing">
<location>
<position position="1"/>
</location>
</feature>
<feature type="cross-link" description="sumo hello">
<location>
<position position="11223344"/>
</location>
</feature>
</entry>
</root>
我需要获取特征类型为"cross-link"且描述包含单词sumo的posiiton属性的值。
到目前为止,这是我尝试过的方法,它正确地为我提供了那些特征类型为 "cross-link" 并且描述中包含相扑一词的值。
from xml.dom import minidom
xmldoc = minidom.parse('P38398.xml')
itemlist = xmldoc.getElementsByTagName('feature')
for s in itemlist:
feattype = s.attributes['type'].value
description = s.attributes['description'].value
if "SUMO" in description:
if "cross-link" in feattype:
print feattype+","+description
当特征类型为 "cross-link" 且描述包含单词 "sumo" 时,如何提取位置值?
除了两点,你就快到了:
- 您必须将 "sumo" 搜索模式更改为小写以匹配上面给出的数据
然后您需要在循环体中添加如下内容
posList = s.getElementsByTagName('position')
for p in posList:
print "-- position is {}".format(p.attributes['position'].value)
这是 XPath 的工作。简单检查 attribute matches and substring matches 然后我们 return 作为字符串的属性。
from lxml import etree
root = etree.parse('P38398.xml').getroot()
xpquery = '//feature[@type="cross-link" and contains(@description, "sumo")]//position/@position'
for att in root.xpath(xpquery):
print(att)
我有一个 XML 如下;
<root>
<entry>
<accession>A</accession>
<accession>B</accession>
<accession>C</accession>
<feature type="cross-link" description="sumo2">
<location>
<position position="15111992"/>
</location>
</feature>
<feature type="temp" description="blah blah sumo">
<location>
<position position="12345"/>
</location>
</feature>
</entry>
<entry>
<accession>X</accession>
<accession>Y</accession>
<accession>Z</accession>
<feature type="test" description="testing">
<location>
<position position="1"/>
</location>
</feature>
<feature type="cross-link" description="sumo hello">
<location>
<position position="11223344"/>
</location>
</feature>
</entry>
</root>
我需要获取特征类型为"cross-link"且描述包含单词sumo的posiiton属性的值。 到目前为止,这是我尝试过的方法,它正确地为我提供了那些特征类型为 "cross-link" 并且描述中包含相扑一词的值。
from xml.dom import minidom
xmldoc = minidom.parse('P38398.xml')
itemlist = xmldoc.getElementsByTagName('feature')
for s in itemlist:
feattype = s.attributes['type'].value
description = s.attributes['description'].value
if "SUMO" in description:
if "cross-link" in feattype:
print feattype+","+description
当特征类型为 "cross-link" 且描述包含单词 "sumo" 时,如何提取位置值?
除了两点,你就快到了:
- 您必须将 "sumo" 搜索模式更改为小写以匹配上面给出的数据
然后您需要在循环体中添加如下内容
posList = s.getElementsByTagName('position') for p in posList: print "-- position is {}".format(p.attributes['position'].value)
这是 XPath 的工作。简单检查 attribute matches and substring matches 然后我们 return 作为字符串的属性。
from lxml import etree
root = etree.parse('P38398.xml').getroot()
xpquery = '//feature[@type="cross-link" and contains(@description, "sumo")]//position/@position'
for att in root.xpath(xpquery):
print(att)