Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.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 如何选择文档中的所有文本节点?_Python_Xpath_Lxml - Fatal编程技术网

Python 如何选择文档中的所有文本节点?

Python 如何选择文档中的所有文本节点?,python,xpath,lxml,Python,Xpath,Lxml,我有一份文件: <html> <body> <p>Hello World!</p> <p>Goodbye!</p> </body> </html> 只生成一个平面字符串数组: ['\n ', 'Hello World!', '\n ', 'Goodbye!', '\n '] 所有结构信息都丢失了,所以我无法知道每个字符串在文档中的位置。有更好的办法吗 以下是完

我有一份文件:

<html>
  <body>
    <p>Hello World!</p>
    <p>Goodbye!</p>
  </body>
</html>
只生成一个平面字符串数组:

['\n    ', 'Hello World!', '\n    ', 'Goodbye!', '\n  ']
所有结构信息都丢失了,所以我无法知道每个字符串在文档中的位置。有更好的办法吗

以下是完整的来源:

import lxml.html
import sys
with open(sys.argv[1]) as fin:
    text_string = fin.read()
root = lxml.html.document_fromstring(text_string)
text_elements = root.xpath("//text()")
print text_elements

您可以使用
getparent()
访问父元素:

导入lxml.html >>>text_字符串=“” ... ... 你好,世界

... 再见

... ... ''' >>>root=lxml.html.document\u fromstring(text\u string) >>>text_elements=root.xpath(“//text()”) >>>对于文本元素中的t: ... 打印t.getparent(),类型(t),报告(t) ... “\n” “你好,世界!” “\n” “再见!” “\n”
啊,我以为它只是一个简单的字符串,但事实证明它不是。谢谢
import lxml.html
import sys
with open(sys.argv[1]) as fin:
    text_string = fin.read()
root = lxml.html.document_fromstring(text_string)
text_elements = root.xpath("//text()")
print text_elements
>>> import lxml.html
>>> text_string = '''<html>
...   <body>
...     <p>Hello World!</p>
...     <p>Goodbye!</p>
...   </body>
... </html>'''
>>> root = lxml.html.document_fromstring(text_string)
>>> text_elements = root.xpath('//text()')
>>> for t in text_elements:
...     print t.getparent(), type(t), repr(t)
... 
<Element body at 0x193b170> <class 'lxml.etree._ElementStringResult'> '\n    '
<Element p at 0x193b1d0> <class 'lxml.etree._ElementStringResult'> 'Hello World!'
<Element p at 0x193b1d0> <class 'lxml.etree._ElementStringResult'> '\n    '
<Element p at 0x193b290> <class 'lxml.etree._ElementStringResult'> 'Goodbye!'
<Element p at 0x193b290> <class 'lxml.etree._ElementStringResult'> '\n  '