我在QGIS中创建插件,从本地磁盘或可移动磁盘打开并解析xml,这是我用来打开xml文件的代码:
from PyQt4 import QtCore, QtGui
from ui_testparse import Ui_testparse
import xml.etree.ElementTree as ETree
# create the dialog for zoom to point
class testparseDialog(QtGui.QDialog):
def __init__(self):
QtGui.QDialog.__init__(self)
# Set up the user interface from Designer.
self.ui = Ui_testparse()
self.ui.setupUi(self)
opendata = self.ui.btnCari
QtCore.QObject.connect(opendata, QtCore.SIGNAL('clicked()'),self.openxml)
def openxml(self, event=None):
#open dialog
openfile = QtGui.QFileDialog.getOpenFileName(self, 'Open File', '*.xml')
self.ui.lineLokasi.setText(openfile)
#call XML data
self.isiData(openfile)
def isiData(self, nmsatu):
#open teks with read mode
openteks = open(nmsatu, 'r').read()
self.ui.textXml.setText(openteks)
并解析xml之后我尝试使用Element Tree,这个代码我用来解析上面代码中的xml:
#Parse XML from Above
self.parsenow(openteks)
def parsenow(self, parse):
element = ETree.fromstring(parse)
xml_obj = ETree.ElementTree(element)
for title_obj in xml_obj.findall('./{gmd#}dateStamp/{gco#}Date'):
print element
self.ui.lineSkala.setText(element)
和xml我要解析的格式如下:
<gmd:datestamp>
<gco:Date> XML Date </gco:Date>
我尝试在QT中的LineSkala(lineEdit)中显示 XML Date ,但是当我运行它时,它可以打开并读取xml但无法在lineSkala中显示 XML Date ,它只是空白,并没有给我任何错误信息
我想念的是什么? 感谢您的帮助
答案 0 :(得分:2)
XPath syntax supported by etree非常有限。此外,您必须在使用find/findall时提供前缀字典(尽管在python2中没有正确记录),或者使用完整的命名空间uri。
所以尝试类似:
ns = {
'gmd': 'http://www.isotc211.org/2005/gmd',
'gco': 'http://www.isotc211.org/2005/gco',
}
tree.findall('.//gmd:dateStamp/gco:Date', ns)
或:
tree.findall('.//{http://www.isotc211.org/2005/gmd}dateStamp/'
'{http://www.isotc211.org/2005/gco}Date')
PS:
如果您需要使用更复杂的XPath语法,请尝试lxml,它具有与ElementTree非常相似的API,但还有更多功能。