gpt4 book ai didi

Oracle XMLTABLE 命名空间问题

转载 作者:行者123 更新时间:2023-12-04 17:02:29 25 4
gpt4 key购买 nike

我试图通过这个脚本从下面的 XML 中获取作为 80621b17-97a8-926d945b602a 的信封_id,但没有任何结果。任何人都可以有任何想法吗?

SELECT b.EnvelopeID
FROM sample_xml a,
XMLTABLE(xmlnamespaces('http://www.w3.org/2001/XMLSchema' as "xsd_k",
'http://www.w3.org/2001/XMLSchema-instance' AS "xsi",
'http://www.docusign.net/API/3.0' AS "k"),
'/xsd_k:DocuSignEnvelopeInformation/xsd_k:EnvelopeStatus' PASSING a.xml
COLUMNS EnvelopeID VARCHAR2(200) PATH 'EnvelopeID')b;

我的示例 xml 是:
<DocuSignEnvelopeInformation xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.docgign.net/API/3.0">
<EnvelopeStatus>
<EnvelopeID>80621b17-97a8-926d945b602a</EnvelopeID>
</EnvelopeStatus>
</DocuSignEnvelopeInformation>

最佳答案

您可以使用默认命名空间。只需说“默认”:)。并看起来与您的 XML 文档中的相同:

SELECT b.EnvelopeID
FROM (SELECT xmltype ('
<DocuSignEnvelopeInformation xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.docgign.net/API/3.0">
<EnvelopeStatus>
<EnvelopeID>80621b17-97a8-926d945b602a</EnvelopeID>
</EnvelopeStatus>
</DocuSignEnvelopeInformation>') AS xml FROM DUAL) a,
XMLTABLE(xmlnamespaces(default 'http://www.docgign.net/API/3.0'),
'/DocuSignEnvelopeInformation/EnvelopeStatus' PASSING a.xml
COLUMNS EnvelopeID VARCHAR2(200) PATH 'EnvelopeID')b;

我们还可以修复您的变体。首先,您在 xml 文档中有 'docgign' 而不是 'docusign'。修复两者之一。比更改 '/xsd_k:DocuSignEnvelopeInformation/xsd_k:EnvelopeStatus' 为 '/k:DocuSignEnvelopeInformation/k:EnvelopeStatus',因为这是默认命名空间,最后将 'EnvelopeID' 更改为 'k:EnvelopeID' :
SELECT EnvelopeID
FROM (SELECT xmltype ('
<DocuSignEnvelopeInformation xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.docusign.net/API/3.0">
<EnvelopeStatus>
<EnvelopeID>80621b17-97a8-926d945b602a</EnvelopeID>
</EnvelopeStatus>
</DocuSignEnvelopeInformation>') AS xml FROM DUAL) a,
XMLTABLE(xmlnamespaces('http://www.w3.org/2001/XMLSchema' as "xsd_k",
'http://www.w3.org/2001/XMLSchema-instance' AS "xsi",
'http://www.docusign.net/API/3.0' AS "k"),
'/k:DocuSignEnvelopeInformation/k:EnvelopeStatus' PASSING a.xml
COLUMNS EnvelopeID VARCHAR2(200) PATH 'k:EnvelopeID')b;

HERE (搜索默认命名空间)

When a default namespace declaration is used on an element, all unqualified element names within its scope are automatically associated with the specified namespace identifier.



这是因为 DocuSignEnvelopeInformation 和此下的所有其他节点都具有 namespace xmlns="http://www.docusign.net/API/3.0"。如果未定义此命名空间,则节点将没有命名空间,并且您不需要在 xmltable 中使用命名空间。

关于Oracle XMLTABLE 命名空间问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38268596/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com