我编写了一些代码来连接FileMaker Server并要求在后端服务器上创建新记录。此部分工作正常,结果包含未在浏览器中显示的意外文本。我无法通过在浏览器中查看树来使查找操作工作,因此我最终打印了标记和属性,并且每个标记属性对都具有以下格式:
标记:{http://www.filemaker.com/xml/fmresultset}错误属性:{'code':'0'}
在下面的代码中,我必须将完全限定的标记放入代码中以使第一个查找起作用。这使我很难找到我想从XML获取的对象的xPath。下面的第二个发现不起作用,因为我无法弄清楚路径。路径应为/ resultset / record /,属性为record-id。任何人都知道发生了什么。为什么fmresultset文档会被添加到每个标记之前?
url = self.getBaseURL( machineID, file, lay ) + fields + "&-new"
result = self.sendURL( url )
import xml.etree.ElementTree as ET
root = ET.fromstring(result)
self.printXML( root )
base = "{http://www.filemaker.com/xml/fmresultset}"
find = root.find( base + "error" )
error = find.attrib[ 'code' ]
recID = 0
if ( error == '0' ):
find = root.find( base + "resultset" + base + "/record" )
recID = find.attrib[ 'record-id' ]
基思
答案 0 :(得分:0)
好的......你提到了命名空间这个词,我想出来了。这使用了root的元素版本。
def getXMLValue( self, root, path, value ):
ns = {'fmrs': 'http://www.filemaker.com/xml/fmresultset' }
find = root.find( path, ns )
value = find.attrib[ value ]
return value
def getError ( self, root ):
return self.getXMLValue ( root, "fmrs:error", 'code' )
def getRecID ( self, root ):
return self.getXMLValue ( root, "fmrs:resultset/fmrs:record", 'record-id' )
此代码正确返回正确的值。我期待着类似的东西。创建该类的实例,然后调用setNamespace()。我不得不把所有这些引用都放在fmrs上,我宁愿不这样做,但这解决了问题,而且代码读起来并不可怕。
感谢您的帮助。
-keith