【问题标题】:Element Tree, Parsing XML didnt appear in QLineEdit元素树,解析 XML 没有出现在 QLineEdit
【发布时间】:2014-04-02 12:23:38
【问题描述】:

我在 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,我用这段代码从上面的代码中解析 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 日期,但是当我运行它时,它可以打开并读取 xml,但未能在 lineSkala 中显示 XML 日期 ,它只是空白,并没有给我任何错误信息

我想念什么? 提前感谢您的帮助

【问题讨论】:

    标签: python xpath xml-namespaces elementtree


    【解决方案1】:

    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,它的 API 与 ElementTree 非常相似,但功能更多。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-26
      • 1970-01-01
      • 2011-10-02
      • 2011-06-11
      • 2016-02-28
      • 1970-01-01
      相关资源
      最近更新 更多