![](/img/trans.png)
[英]The XML Tag doesn't appear when the Value is Null in the Query in Oracle
[英]Oracle - How to Capture a value Under an XML TAG
需要以下幫助。 如果我想捕獲特定標簽的值,該如何處理? 例如
我想從突出顯示的標簽中捕獲值(800.422.2762(美國和加拿大))。
<text top="89" left="611" width="177" height="11" font="1">800.422.2762 (U.S. and Canada)</text>
簡而言之,我想對這個標記進行硬編碼,以在每次程序運行時捕獲其基礎值。
樣本XML:
<?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>
到目前為止,我已經嘗試了以下方法。 我成功提取了數據,但是我想基於硬編碼標簽提取特定的值。 請幫助該方法。
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
/
輸出:
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
只需從更改XQuery
'/pdf2xml/page/text'
至
'/pdf2xml/page/text[@top=89]'
結果將是
800.422.2762 (U.S. and Canada)
或將查詢更改為:
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;
如果您只有一個源文檔,並且只需要一個節點值,則可以使用XMLQuery而不是XMLTable,在@wolφi的XPath上略有不同:
select XMLQuery('/pdf2xml/page/text[@top=89]/text()'
passing xmldoc
returning content) as text
from data;
它為您提供了XML片段,或者
select XMLQuery('/pdf2xml/page/text[@top=89]/text()'
passing xmldoc
returning content).getStringVal() as text
from data;
這給你一個字符串:
TEXT
------------------------------
800.422.2762 (U.S. and Canada)
當然,如果您確實有多個文檔或節點,則可以使用XMLTable。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.