Web Services XMLTABLE函数中的名称空间

dhxwm5r4  于 2022-11-15  发布在  其他
关注(0)|答案(1)|浏览(116)

我在表中存储了以下xml文档

<ARSoapOut xmlns:soap=http://schemas.xmlsoap.org/soap/envelope/>
<ARResponse xmlns=http://company.com/path>
    <ARResult>
        <diffgram xmlns:diffgr=urn:schemas-microsoft-com:xml-diffgram-v1 xmlns:msdata=urn:schemas-microsoft-com:xml-msdata>
            <NewDataSet xmlns=>
                <FinAccountsReceivable diffgr:id=FinAccountsReceivable1 msdata:rowOrder=0>
                    <SiteID>
                        10001
                    </SiteID>
                    <UnitName>
                        1
                    </UnitName>
                    <Tenant>
                        Doe, John 
                    </Tenant>
                    <Company>
                        ABC
                    </Company>
                    <Balance>
                        46.7600
                    </Balance>
                </FinAccountsReceivable>
            </NewDataSet>   
        </diffgram>
    </ARResult>
</ARResponse>

当我执行下面的查询时,没有得到任何结果。

XML_TABLE = SELECT * FROM XMLTABLE (XMLNAMESPACE(DEFAULT 'http://company.com/path')
  'ARSoapOut/ARResponse/ARResult/diffgram/NewDataSet/FinAccountsReceivable' PASSING XML_VALUE
COLUMNS 
SiteID NVARCHAR(5) PATH 'SiteID',
UnitName NVARCHAR(2) PATH 'UnitName',
Tenant NVARCHAR(50) PATH 'Tenant',
Company NVARCHAR(20) PATH 'Company',
Balance DECIMAL(13,2) PATH 'Balance'
);

我不确定应解析命名空间子句的内容。请帮助

q43xntqr

q43xntqr1#

您的示例有几个问题:

无效的XML

所有命名空间声明都需要正确地用引号引起来,例如:一个月一个月一个月一个月

XML格式

HANA将标记内的空格视为值的一部分。例如,这就是SiteID值无法放入NVARCHAR(5)列的原因。

XML名称空间

路径表达式不考虑命名空间。

溶液

下面是一个工作示例:

SELECT * FROM XMLTABLE (XMLNAMESPACE('http://company.com/path' AS 'company'),
  '/ARSoapOut/company:ARResponse/company:ARResult/company:diffgram/NewDataSet/FinAccountsReceivable' PASSING '
<ARSoapOut xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
    <ARResponse xmlns="http://company.com/path">
        <ARResult>
            <diffgram xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
                <NewDataSet xmlns="">
                    <FinAccountsReceivable diffgr:id="FinAccountsReceivable1" msdata:rowOrder="0">
                        <SiteID>10001</SiteID>
                        <UnitName>1</UnitName>
                        <Tenant>Doe, John</Tenant>
                        <Company>ABC</Company>
                        <Balance>46.7600</Balance>
                    </FinAccountsReceivable>
                </NewDataSet>   
            </diffgram>
        </ARResult>
    </ARResponse>
</ARSoapOut>'
COLUMNS 
SiteID NVARCHAR(5) PATH 'SiteID',
UnitName NVARCHAR(2) PATH 'UnitName',
Tenant NVARCHAR(50) PATH 'Tenant',
Company NVARCHAR(20) PATH 'Company',
Balance DOUBLE PATH 'Balance'
);

相关问题