Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.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 3.x Python中的XML解析问题_Python 3.x_Xml_Xml Parsing - Fatal编程技术网

Python 3.x Python中的XML解析问题

Python 3.x Python中的XML解析问题,python-3.x,xml,xml-parsing,Python 3.x,Xml,Xml Parsing,我正在尝试解析XML文件(字幕)的以下内容(这里只是一块) 但它的回报是: ['', '', '- Tu es sérieuse ?', 'Regarde ce que tu as fait.', '', "On peut faire quelque chose, je m'ennuie....", '', '', "J'ai promis à Stuart de l'appeler.", '', '- A tes ordres.', ..... 如果在实际文本之前有ID时间/值行

我正在尝试解析XML文件(字幕)的以下内容(这里只是一块)

但它的回报是:

['', '', '- Tu es sérieuse ?', 'Regarde ce que tu as fait.', 
 '', "On peut faire quelque chose, je m'ennuie....", '', '', 
 "J'ai promis à Stuart de l'appeler.", '', '- A tes ordres.', 
 .....
如果在实际文本之前有ID时间/值行,我似乎找不到一种方法来获取“/s”的文本值

有什么帮助吗?

使用lxml尝试一下:

import lxml.html
subt = [your html above]
doc = lxml.html.fromstring(subt)
dialog = doc.xpath('//*/text()')
myPhrasesArray = []
for d in dialog:
    if len(d.strip())>0:
        myPhrasesArray.append(d.strip())
myPhrasesArray
输出:

["- Le requin t'a eue.",
 '- Tu es sérieuse ?',
 'Regarde ce que tu as fait.',
 "Je vais t'en chercher un autre.",
 "On peut faire quelque chose, je m'ennuie...."]

您不想在根目录中对q执行
,而只想迭代
s
标记

您可以使用
ElementTree.iter()
ElementTree.findall()
。前者看一切,不管有多深。后者只关注直接的孩子。对于您给出的示例,
findall()
更有意义

myPhrasesArray = [] # just start with it empty
for s in root.findall('s'):
    myPhrasesArray.append(s.text)
鉴于这非常简单,您甚至可以在一行中完成:

myPhrasesArray = [s.text for s in root.findall('s')]
就这样解决了

parsedXml = ET.parse("data/tst/1914/"+ str(filename))
            root = parsedXml.getroot()

            for child in root:
                try:
                    if child.tag == "s":
                        a = ''.join(child.itertext()).strip().lower()
                        if a.startswith("-"):
                            a = a.lstrip("-")
                            mySentences.append(a) 

根中的
q
是每个标记,但是
time
标记有空文本。你想对时间标签做什么?我想得到所有的文本行,然后扔掉计时器。并将这些文本语句存储在一个数组中,使用.itertext将其排序,因为findall或iter都不起作用(一开始就尝试过),如果有人感兴趣,我会提供一个代码示例作为答案
myPhrasesArray = [s.text for s in root.findall('s')]
parsedXml = ET.parse("data/tst/1914/"+ str(filename))
            root = parsedXml.getroot()

            for child in root:
                try:
                    if child.tag == "s":
                        a = ''.join(child.itertext()).strip().lower()
                        if a.startswith("-"):
                            a = a.lstrip("-")
                            mySentences.append(a)