Netsuite命名空间问题

时间:2016-07-06 18:18:58

标签: python web-services netsuite

我目前正在使用python和NetSuite Webservices开展一个辅助项目。我已成功发送数据中心请求。我使用元素树导入来解析xml请求和响应。无论我试图抓住下面的其中一个网址,我最终都没有得到任何价值,而且我认为这与名字间距有关,这是我非常可怕的。

<?xml version="1.0" encoding="utf-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <soapenv:Header>
        <platformMsgs:documentInfo xmlns:platformMsgs="urn:messages_2016_1.platform.webservices.netsuite.com">
            <platformMsgs:nsId>WEBSERVICES__XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX</platformMsgs:nsId>
        </platformMsgs:documentInfo>
    </soapenv:Header>
    <soapenv:Body>
        <getDataCenterUrlsResponse xmlns="">
            <platformCore:getDataCenterUrlsResult xmlns:platformCore="urn:core_2016_1.platform.webservices.netsuite.com">
                <platformCore:status isSuccess="true" />
                <platformCore:dataCenterUrls>
                    <platformCore:restDomain>https://rest.na1.netsuite.com</platformCore:restDomain>
                    <platformCore:webservicesDomain>https://webservices.na1.netsuite.com</platformCore:webservicesDomain>
                    <platformCore:systemDomain>https://system.na1.netsuite.com</platformCore:systemDomain>
                </platformCore:dataCenterUrls>
            </platformCore:getDataCenterUrlsResult>
        </getDataCenterUrlsResponse>
    </soapenv:Body>
</soapenv:Envelope>

import xml.etree.ElementTree as ET
ns = {'platformCore': 'urn:messages_2016_1.platform.webservices.netsuite.com'}
xml.find('platformCore:webservicesDomain', ns)
除了选择器或命名空间之外,xml.find()永远不会返回除null值之外的任何内容。如果有人可以告诉我正确的方法是什么,那么我可以从这些回复中得到这个网址和其他数据,我很感激。

如果您想知道我为什么要以艰难的方式做事而不是使用客户端或更好的工具。我试图在sublime text 3中嵌入一些web服务功能,这些功能使用了特定版本的python 3(3.3.6),并且使得导入库不是不可能的,而是麻烦。

1 个答案:

答案 0 :(得分:0)

看起来你应该尝试:

xml.find('{urn:messages_2016_1.platform.webservices.netsuite.com}webservicesDomain')

ns = {'nsp': 'urn:messages_2016_1.platform.webservices.netsuite.com'}
xml.find('nsp:webservicesDomain', ns)