2013-06-16 2 views
0

파이썬에서 odt 파일을 편집 할 때 큰 문제가 있습니다. 나는 etree 방식을 선택했지만 elementpath 구문을 이해하는 것은 어렵습니다. 나는 ... 노드에서 텍스트가 XPath는 구문 XML 너무 노드입니다,하지만 난 잃었어요, 음 ... 노드로 그것을 고려 elementpath 확실하지 않다 어딘가에보고 한python etree 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를 사용하여 노드를 찾는 찾기 요청을 어떻게 수정할 수 있습니까?

답변

0

다음 코드 중 하나를 시도해보십시오

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

또는

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