python etree elementpath语法

时间:2013-06-16 13:28:57

标签: python elementtree

我在python中编辑odt文件时遇到了一些大问题。我选择了etree方式,但理解elementpath语法非常困难。 我已经看到某些地方节点中的文本也是xml中带有xpath语法的节点,但我不确定elementpath将其视为节点... 好吧,我迷路了...

#!/usr/bin/env python
# -*- coding: utf-8 -*- 

import StringIO
from lxml import etree
xmldata = '''\
<?xml version="1.0" encoding="UTF-8"?>
<document-content xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" >
<text:span text:style-name="T2">water is good</text:span>
<text:span text:style-name="T3">#QUALITE#</text:span>
<text:span text:style-name="T2">#AUTEUR#</text:span>
<text:span text:style-name="T2">#QUALITE#</text:span>
<text:span text:style-name="T4">#AUTEUR#</text:span>
<text:p text:style-name="P14"></text:p>
</document-content>
'''

fakefile = StringIO.StringIO(xmldata)
root = etree.parse(fakefile).getroot()
fakefile.close()
nspace = {}
nspace["t"] = "urn:oasis:names:tc:opendocument:xmlns:text:1.0"
query = root.find('.//t:span[@t:style-name="T2"]', nspace)
print query.text

如何修改使用#AUTEUR#text?

选择节点的查找请求

1 个答案:

答案 0 :(得分:0)

请尝试以下代码之一:

for query in root.xpath('.//t:span[contains(text(),"#AUTEUR#")]', namespaces=nspace):
    print query.text

OR

for query in root.xpath('.//t:span[text()="#AUTEUR#"]', namespaces=nspace):
    print query.text