准备晚上

2024-04-26 13:51:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我编写了一些代码来连接FileMaker服务器,并请求在后端服务器上创建一个新记录。这部分工作正常,结果包含未在浏览器中显示的意外文本。我无法通过查看浏览器中的树来执行查找操作,因此我最终打印了标记和属性,并且每个标记属性对都有以下格式:

标记:{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' ]

基思


Tags: 代码标记self服务器httpbase属性www
1条回答
网友
1楼 · 发布于 2024-04-26 13:51:44

好吧。。。你提到了名称空间这个词,我就猜出来了。这将使用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上,我不想这样做,但这解决了问题,而且代码读起来并不可怕。你知道吗

谢谢你的帮助。你知道吗

-基思

相关问题 更多 >