首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Oracle -如何在XML标记下捕获值

Oracle -如何在XML标记下捕获值
EN

Stack Overflow用户
提问于 2018-07-06 13:41:50
回答 3查看 59关注 0票数 2

需要在下面的帮助。如果我想捕获特定标记的值,那么如何处理相同的值呢?例如

我想从突出显示的标记中捕获值(800.422.2762(美国和加拿大))。

代码语言:javascript
复制
<text top="89" left="611" width="177" height="11" font="1">800.422.2762 (U.S. and Canada)</text>

简而言之,每次我的程序运行时,我都想对这个标记进行硬编码,以捕获底层值。

示例XML:

代码语言:javascript
复制
 <?xml version="1.0" encoding="UTF-8"?>
<pdf2xml producer="popple`enter code here`r" version="0.51.0">
<page number="1" position="absolute" top="0" left="0" height="1188" width="918">
   <fontspec id="0" size="27" family="Helvetica" color="#000000"/>
   <fontspec id="1" size="9" family="Helvetica" color="#000000"/>
   <fontspec id="2" size="9" family="Helvetica" color="#000000"/>
   <fontspec id="3" size="9" family="Times" color="#000000"/>
   <fontspec id="4" size="12" family="Helvetica" color="#000000"/>
   <fontspec id="5" size="12" family="Helvetica" color="#000000"/>
   <fontspec id="6" size="9" family="Helvetica" color="#000000"/>
<image top="27" left="54" width="203" height="108" src="ext-resources\bin\asdf-1_1.jpg"/>
<text top="103" left="346" width="123" height="28" font="0"><b>INVOICE</b></text>
<text top="75" left="611" width="211" height="11" font="1">+1 913.217.6000, Fax +1 913.341.3742</text>
<text top="89" left="611" width="177" height="11" font="1">800.422.2762 (U.S. and Canada)</text>
<text top="102" left="611" width="230" height="11" font="1">headquarters@armaintl.org, www.arma.org</text>
<text top="32" left="611" width="104" height="11" font="1">ARMA International</text>
</page>
</pdf2xml>

到目前为止,我已经尝试了以下方法,成功地提取了数据,但是我想要提取一个基于硬编码标记的特定值。请帮忙解决这个问题。

代码语言:javascript
复制
WITH data
     AS (SELECT xmltype (
                   '<?xml version="1.0" encoding="UTF-8"?>
<pdf2xml producer="popple`enter code here`r" version="0.51.0">
<page number="1" position="absolute" top="0" left="0" height="1188" width="918">
   <fontspec id="0" size="27" family="Helvetica" color="#000000"/>
   <fontspec id="1" size="9" family="Helvetica" color="#000000"/>
   <fontspec id="2" size="9" family="Helvetica" color="#000000"/>
   <fontspec id="3" size="9" family="Times" color="#000000"/>
   <fontspec id="4" size="12" family="Helvetica" color="#000000"/>
   <fontspec id="5" size="12" family="Helvetica" color="#000000"/>
   <fontspec id="6" size="9" family="Helvetica" color="#000000"/>
<image top="27" left="54" width="203" height="108" src="ext-resources\bin\asdf-1_1.jpg"/>
<text top="103" left="346" width="123" height="28" font="0"><b>INVOICE</b></text>
<text top="75" left="611" width="211" height="11" font="1">+1 913.217.6000, Fax +1 913.341.3742</text>
<text top="89" left="611" width="177" height="11" font="1">800.422.2762 (U.S. and Canada)</text>
<text top="102" left="611" width="230" height="11" font="1">headquarters@armaintl.org, www.arma.org</text>
<text top="32" left="611" width="104" height="11" font="1">ARMA International</text>
</page>
</pdf2xml>')
                   xmldoc
           FROM DUAL)
SELECT x.*
  FROM data,
       XMLTABLE ('/pdf2xml/page/text'
                 PASSING xmldoc
                 COLUMNS text VARCHAR2 (50) PATH '/text') x
/

输出:

代码语言:javascript
复制
TEXT
--------------------------------------------------
INVOICE
+1 913.217.6000, Fax +1 913.341.3742
800.422.2762 (U.S. and Canada)
headquarters@armaintl.org, www.arma.org
ARMA International
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-07-06 16:19:08

如果您只有一个源文档,并且只需要一个节点值,则可以使用XMLQuery而不是XMLTable,在@wolφi的XPath上略有变化:

代码语言:javascript
复制
select XMLQuery('/pdf2xml/page/text[@top=89]/text()'
  passing xmldoc
  returning content) as text
from data;

为您提供一个XML片段,或者

代码语言:javascript
复制
select XMLQuery('/pdf2xml/page/text[@top=89]/text()'
  passing xmldoc
  returning content).getStringVal() as text
from data;

这给了你一个字符串:

代码语言:javascript
复制
TEXT                          
------------------------------
800.422.2762 (U.S. and Canada)

当然,如果您确实有多个文档或节点,那么XMLTable就是最好的选择。

票数 0
EN

Stack Overflow用户

发布于 2018-07-06 14:21:06

只需将XQuery改为

代码语言:javascript
复制
'/pdf2xml/page/text'

代码语言:javascript
复制
'/pdf2xml/page/text[@top=89]'

结果将是

代码语言:javascript
复制
800.422.2762 (U.S. and Canada)
票数 3
EN

Stack Overflow用户

发布于 2018-07-06 14:27:28

或将查询更改为:

代码语言:javascript
复制
SELECT x.*
FROM data,
   XMLTABLE ('/pdf2xml/page/text'
             PASSING xmldoc
             COLUMNS 
             text VARCHAR2 (50) PATH '/text',
             top  number        PATH '@top',
             left  number       PATH '@left',
             width  number      PATH '@width',
             height  number     PATH '@height',
             font    number     PATH '@font'
             ) x
where x.top = 89
and x.left = 611
and x.width = 177
and x.height = 11
and x.font = 1;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51211744

复制
相关文章

相似问题

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