Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Python元素树解析XML_Python_Xml_Elementtree - Fatal编程技术网

使用Python元素树解析XML

使用Python元素树解析XML,python,xml,elementtree,Python,Xml,Elementtree,我有一个以下格式的XML文档 <root> <H D="14/11/2017"> <FC> <F LV="0">The quick</F> <F LV="1">brown</F> <F LV="2">fox</F> </FC> </H> <H D="14/11/2017"> <FC> <F LV="0"&

我有一个以下格式的XML文档

<root>
<H D="14/11/2017">
<FC>
    <F LV="0">The quick</F>
    <F LV="1">brown</F>
    <F LV="2">fox</F>
</FC>
</H>
<H D="14/11/2017">
<FC>
    <F LV="0">The lazy</F>
    <F LV="1">fox</F>
</FC>
</H>
</root>

快车
棕色的
狐狸
懒汉
狐狸
如何从H标记内的“D”中提取文本,以及从F标记内提取所有文本。

我们可以通过读取文件来导入此数据:

或直接从字符串:

随后在同一页中,20.5.1.4。寻找有趣的元素:

for neighbor in root.iter('neighbor'):
    print(neighbor.attrib)
这意味着:

import xml.etree.ElementTree as ET

root = ET.fromstring("""
<root>
<H D="14/11/2017">
<FC>
    <F LV="0">The quick</F>
    <F LV="1">brown</F>
    <F LV="2">fox</F>
</FC>
</H>
<H D="14/11/2017">
<FC>
    <F LV="0">The lazy</F>
    <F LV="1">fox</F>
</FC>
</H>
</root>""")
# root = tree.getroot()
for h in root.iter("H"):
    print (h.attrib["D"])
for f in root.iter("F"):
    print (f.attrib, f.text)

您没有具体说明要使用什么,所以我建议将lxml用于python。要获得您想要的值,您有更多的可能性:

带循环:

from lxml import etree
tree = etree.parse('XmlTest.xml')
root = tree.getroot()
text = []
for element in root:
   text.append(element.get('D',None))
     for child in element:
       for grandchild in child:
         text.append(grandchild.text)
print(text)
from lxml import etree
tree = etree.parse('XmlTest.xml')
root = tree.getroot() 
D = root.xpath("./H")
F = root.xpath(".//F")

for each in D:
  print(each.get('D',None))

for each in F:
  print(each.text)
输出: ['14/11/2017'、'quick'、'brown'、'fox'、'14/11/2017'、'lazy'、'fox']

使用xpath:

from lxml import etree
tree = etree.parse('XmlTest.xml')
root = tree.getroot()
text = []
for element in root:
   text.append(element.get('D',None))
     for child in element:
       for grandchild in child:
         text.append(grandchild.text)
print(text)
from lxml import etree
tree = etree.parse('XmlTest.xml')
root = tree.getroot() 
D = root.xpath("./H")
F = root.xpath(".//F")

for each in D:
  print(each.get('D',None))

for each in F:
  print(each.text)
输出: 14/11/2017 14/11/2017 快车 棕色的 狐狸 懒汉 狐狸

两者都有各自的优势,但给你一个良好的起点。 我建议使用,因为当值为 失踪

这应该对你有帮助

import xml.etree.ElementTree as ET
data='''
<root>
<H D="14/11/2017">
<FC>
    <F LV="0">The quick</F>
    <F LV="1">brown</F>
    <F LV="2">fox</F>
</FC>
</H>
<H D="14/11/2017">
<FC>
    <F LV="0">The lazy</F>
    <F LV="1">fox</F>
</FC>
</H>
</root>
'''
#list created to store data
D_data=[]
F_data=[]

#data parsed
root= ET.XML(data)

#This will get the value of D
for sub in root:
    b=(sub.attrib.get('D'))
    D_data.append(b)

#This will get all the text for F tag in xml
for f in root.iter("F"):
    b=f.text
    #print f.tag,f.attrib,f.text
    F_data.append(b)

print D_data
print F_data
将xml.etree.ElementTree作为ET导入
数据=“”
快车
棕色的
狐狸
懒汉
狐狸
'''
#创建用于存储数据的列表
D_数据=[]
F_数据=[]
#解析的数据
root=ET.XML(数据)
#这将得到D的值
对于根目录中的子目录:
b=(sub.attrib.get('D'))
D_数据附加(b)
#这将获得xml中F标记的所有文本
对于根中的f.iter(“f”):
b=f.text
#打印f.tag、f.attrib、f.text
F_数据附加(b)
打印D_数据
打印F_数据
import xml.etree.ElementTree as ET
data='''
<root>
<H D="14/11/2017">
<FC>
    <F LV="0">The quick</F>
    <F LV="1">brown</F>
    <F LV="2">fox</F>
</FC>
</H>
<H D="14/11/2017">
<FC>
    <F LV="0">The lazy</F>
    <F LV="1">fox</F>
</FC>
</H>
</root>
'''
#list created to store data
D_data=[]
F_data=[]

#data parsed
root= ET.XML(data)

#This will get the value of D
for sub in root:
    b=(sub.attrib.get('D'))
    D_data.append(b)

#This will get all the text for F tag in xml
for f in root.iter("F"):
    b=f.text
    #print f.tag,f.attrib,f.text
    F_data.append(b)

print D_data
print F_data