首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从XMLType变量中检索多个XMLTYPE

从XMLType变量中检索多个XMLTYPE
EN

Stack Overflow用户
提问于 2017-11-22 07:35:03
回答 1查看 51关注 0票数 0

我有这个XML:

代码语言:javascript
复制
<envCFe versao="0.07" xmlns="http://www.fazenda.sp.gov.br/sat">
    <tpAmb>1</tpAmb>
    <idLote>4100</idLote>
    <cUF>35</cUF>
    <LoteCFe>
        <CFe>
            <infCFe versao="0.07" versaoDadosEnt="0.07" versaoSB="020100">
            </infCFe>
        </CFe>
        <CFe>
            <infCFe versao="0.07" versaoDadosEnt="0.07" versaoSB="020100">
            </infCFe>
        </CFe>
        <CFe>
            <infCFe versao="0.07" versaoDadosEnt="0.07" versaoSB="020100">
            </infCFe>
        </CFe>
    <dhEnvio>20171106081311</dhEnvio>
    <nserieSAT>000081226</nserieSAT>
</envCFe>

我还需要让<LoteCFe中的节点<CFe>在一个变量中检索与XMLTYPE一样多的节点

将参数传递给另一个过程,因此对于simplify:

代码语言:javascript
复制
SELECT
X.nodeCFe
FROM
XMLTABLE(
    '/envCFe/LoteCFe'
    PASSING XMLTYPE(
        '<envCFe versao="0.07" xmlns="http://www.fazenda.sp.gov.br/sat">
        <tpAmb>1</tpAmb>
        <idLote>4100</idLote>
        <cUF>35</cUF>
        <LoteCFe>
            <CFe>
                <infCFe versao="0.07" versaoDadosEnt="0.07" versaoSB="020100">
                </infCFe>
            </CFe>
            <CFe>
                <infCFe versao="0.07" versaoDadosEnt="0.07" versaoSB="020100">
                </infCFe>
            </CFe>
            <CFe>
                <infCFe versao="0.07" versaoDadosEnt="0.07" versaoSB="020100">
                </infCFe>
            </CFe>
            <dhEnvio>20171106081311</dhEnvio>
            <nserieSAT>000081226</nserieSAT>
        </LoteCFe>
    </envCFe>'
    )
    COLUMNS
        nodeCFe XMLTYPE PATH 'CFe'
) X
;

为了将结果显示为表格,我可能会犯什么错误?

代码语言:javascript
复制
nodeCFe
-------
<CFe><infCFe versao="0.07" versaoDadosEnt="0.07" versaoSB="020100"></infCFe</CFe>
<CFe><infCFe versao="0.07" versaoDadosEnt="0.07" versaoSB="020100"></infCFe</CFe>
<CFe><infCFe versao="0.07" versaoDadosEnt="0.07" versaoSB="020100"></infCFe</CFe>
EN

回答 1

Stack Overflow用户

发布于 2017-11-22 08:01:38

您的根节点声明了一个名称空间,因此您需要在查询中处理该名称空间;您可以使用默认的XMLNamespaces子句进行处理。您还需要XPath转到您想要提取的节点:

代码语言:javascript
复制
SELECT
X.nodeCFe
FROM
XMLTABLE(
    XMLNAMESPACES(default 'http://www.fazenda.sp.gov.br/sat'),
    '/envCFe/LoteCFe/CFe'
    PASSING XMLTYPE(
...

使用您的数据:

代码语言:javascript
复制
SELECT
X.nodeCFe
FROM
XMLTABLE(
    XMLNAMESPACES(default 'http://www.fazenda.sp.gov.br/sat'),
    '/envCFe/LoteCFe/CFe'
    PASSING XMLTYPE(
        '<envCFe versao="0.07" xmlns="http://www.fazenda.sp.gov.br/sat">
        <tpAmb>1</tpAmb>
        <idLote>4100</idLote>
        <cUF>35</cUF>
        <LoteCFe>
            <CFe>
                <infCFe versao="0.07" versaoDadosEnt="0.07" versaoSB="020100">
                </infCFe>
            </CFe>
            <CFe>
                <infCFe versao="0.07" versaoDadosEnt="0.07" versaoSB="020100">
                </infCFe>
            </CFe>
            <CFe>
                <infCFe versao="0.07" versaoDadosEnt="0.07" versaoSB="020100">
                </infCFe>
            </CFe>
            <dhEnvio>20171106081311</dhEnvio>
            <nserieSAT>000081226</nserieSAT>
        </LoteCFe>
    </envCFe>'
    )
    COLUMNS
        nodeCFe XMLTYPE PATH '.'
) X
;

获取

代码语言:javascript
复制
NODECFE                                                                         
--------------------------------------------------------------------------------
<CFe xmlns="http://www.fazenda.sp.gov.br/sat"><infCFe versao="0.07" versaoDadosE
nt="0.07" versaoSB="020100">
                </infCFe></CFe>

<CFe xmlns="http://www.fazenda.sp.gov.br/sat"><infCFe versao="0.07" versaoDadosE
nt="0.07" versaoSB="020100">
                </infCFe></CFe>

<CFe xmlns="http://www.fazenda.sp.gov.br/sat"><infCFe versao="0.07" versaoDadosE
nt="0.07" versaoSB="020100">
                </infCFe></CFe>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47424505

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档